Javascript 在Django中的两个自定义标记之间传递变量
我正在尝试实现django模板标记Javascript 在Django中的两个自定义标记之间传递变量,javascript,jquery,python,django,Javascript,Jquery,Python,Django,我正在尝试实现django模板标记{%domready%}{%enddomready%},它将获取它的内容,记住它,然后标记{%domready_render%},它将呈现所有内容 它看起来像这样: {# main.html #} <html> ... <body> ... <script> (function($) { $(document).ready(function() { {% do
{%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...
但是这个上下文['dom_ready']只适用于同一个模板(我的意思是,我可以在一些其他文件.html中执行{{dom_ready}}
,但我在main.html中没有看到它(可能是因为它们具有不同的渲染上下文或其他什么?)
谢谢。正如您所猜测的,渲染上下文不会在模板文件之间共享 您可以通过使用模块级变量来解决问题,在该变量中定义模板标记 加上
dom_ready = []
到文件的顶部,然后在您具有上下文的位置['dom_ready']将其替换为dom_ready
你知道你可以多次调用$.ready吗?这可能比使用模板标记更简单、更简洁。是的,但它不是线程安全的,不是吗?我的意思是,我也必须处理这个问题,对吗?当然,是的,但我们谈论的是“类似小部件的”有时候,你不能只内联写标记。这取决于你如何运行Django,如果它是prefork,那么不,你不:-)你可以让dom_ready成为一个由线程索引的列表字典。get_ident()。哦,我会读关于preforking的书,以前没听过,谢谢。但是忘记线程还是不好的
dom_ready = []