javascript - 在 Django 中的两个自定义标签之间传递变量

标签 javascript jquery python django

我正在尝试实现 django 模板标签 {% domready %}{% enddomready %} 它将获取它的内容,将其记住某处,然后标记 {% domready_render %} 将呈现所有内容。

它看起来像这样:

{# main.html #}
<html>
...
<body>
  ...
  <script>
      (function($) {
          $(document).ready(function() {
              {% domready_render %}
          });
      })(jQuery);
  </script>
</body>
</html>


{# some_other_file.html #}
{% extends main.html %}
..some html...
<a href="" id="link1">Link with onclick</a>
{% domready %}
    $('#link1').click(function() { ... describe here your javascript ... });
{% enddomready %}
..some html...
<a href="" id="link2">Another with onclick</a>
{% domready %}
    $('#link2').click(function() { ... describe here your another javascript ... });
{% enddomready %}
..some html...

所以我的问题是:我该怎么做?我的意思是,这是我尝试做的事情:

@register.tag
def domready(parser, token):
    nodelist = parser.parse(('enddomready',))
    parser.delete_first_token()
    return DomreadyNode(nodelist)

class DomreadyNode(template.Node):
    def __init__(self, nodelist):
        self.nodelist = nodelist

    def render(self, context):
        if 'dom_ready' not in context:
            context['dom_ready'] = []

        context['dom_ready'].append(self.nodelist.render(context))
        return ''

@register.tag
def domready_render(parser, token):
    return DomreadyRenderNode()

class DomreadyRenderNode(template.Node):
    def render(self, context):
        if 'dom_ready' in context:
            return u"\n".join(context['dom_ready'])
        return ''

但是这个 context['dom_ready'] 只适用于相同的模板(我的意思是,我可以在 some_other_file.html 中执行 {{ dom_ready }},但我在 main 中看不到它。 html(可能是因为它们有不同的渲染上下文或什么?)。

谢谢。

最佳答案

如您所料,渲染上下文不会在模板文件之间共享。

您可以通过在定义模板标签的地方使用模块级变量来解决您的问题。

只需添加

dom_ready = []

到文件的顶部,然后将上下文 ['dom_ready'] 替换为 dom_ready。

您知道您可以多次调用 $.ready 吗?这可能比使用模板标签实现这一点更简单、更清晰。

关于javascript - 在 Django 中的两个自定义标签之间传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5119897/

相关文章:

jquery - 解析独立网站? (或者, "Scaling an entire website to fill the browser")

python - bool 索引与整个 bool 值 df

python - 我想找到 pandas 数据框中 1 列与所有其他列之间的协方差

Javascript 如何传递多个参数

javascript - 过滤函数不返回值

javascript - 绝对位置和滚动问题

javascript - 避免根据显示的图像调整幻灯片 div 大小?

python - Kivy:从任何小部件访问配置值

带有闭包解释的 Javascript Singleton

javascript - 如何使用 js 数组方法(例如 map()、reduce()、filter() 等)格式化来自服务器的响应,如下所示?