Django';s{%include with var=";val";%}更新上下文

Django';s{%include with var=";val";%}更新上下文,django,django-templates,Django,Django Templates,我刚刚发现,如果使用和包含子模板,那么基本模板中就可以使用变量。非常容易复制: Test: {{ test }} {% include "tpl.txt" with test="passed" %} Test: {{ test }} 输出: Test: Test: passed 是虫子吗 UPD.我必须说,在tpl.txt中有一个包含标签,带有take\u context=True。此包含标记还可以执行以下操作: @register.inclusion_tag('my_tag.txt', t

我刚刚发现,如果使用
包含子模板,那么基本模板中就可以使用变量。非常容易复制:

Test: {{ test }}
{% include "tpl.txt" with test="passed" %}
Test: {{ test }}
输出:

Test:
Test: passed
是虫子吗

UPD.我必须说,在
tpl.txt
中有一个包含标签,带有
take\u context=True
。此包含标记还可以执行以下操作:

@register.inclusion_tag('my_tag.txt', takes_context=True)
def my_tag(context):
    context.update({'new': 'key'})
    return context

如果您不更新上下文,或者如果您更新了上下文['new']='key',它将按预期工作。如果您执行了
更新
,则使用
传递给
{%include%}
的所有变量稍后将在模板中可用。它仍然是一种wierd,因为变量在父模板中变为可用,而不是更新的键(“new”)变为可用,而是
{%include%}
变量。但问题是局部的。

您使用的是哪个版本的django?无法在1.7中复制。我认为这是意料之中的,所包含的模板是在当前上下文中评估的,可能会使用新变量进行增强。不过我不确定django的最新版本。@catavaran,是的,我还不够清楚。不过,这种行为还是很古怪的。更新。