【问题标题】:Django template tag modifies the context of only one blockDjango 模板标签只修改一个块的上下文
【发布时间】:2016-02-08 14:12:00
【问题描述】:

我制作了一个模板标签,目的是简化 Angular 的包含。

负责在上下文中设置一些变量的标签如下:

@register.simple_tag(takes_context=True)
def ng_controller(context, controller_name, file_name):
    context['angular_import'] = True
    context['angular_controller_file'] = file_name
    return 'ng-controller="{}"'.format(controller_name)

根模板有这个块代替 javascript 导入

{% block container_content %}{% endblock %}
{% block angular_inclusion %}{% endblock %}

继承根模板的模板是this

{% extends 'root.html' %}
{% block container_content %}
<div class="row">
    <div class="col-sm-12">
        <div class="well" {% ng_controller 'CreateEdictController' 'js/controllers/create-edict-controller.js' %}>
            {{ angular_controller_file }}
        </div>
    </div>
</div>
{% endblock %}

{% block angular_inclusion %}
{{ angular_controller_file }}
{% endblock %}

我可以在第一个块中成功访问{{ angular_controller_file }},但在第二个块中不能。如何确保上下文操作也影响第二个块?

【问题讨论】:

  • 我原以为它会反过来,因为您在根目录中没有container_content...您如何验证您可以/不能访问该变量?
  • @Sayse 对不起,我省略了。根模板确实有块container_content
  • 看起来好像上下文变量的范围被限制在与模板标签相同的范围内,使用include 包含一个javascript文件或html sn-p 可能更有意义,但我不确定我是否完全理解用例

标签: python django django-templates


【解决方案1】:

上下文中的变量范围

在上下文中设置的任何变量都只能在相同的 分配它的模板块。这种行为是 故意的;它为变量提供了一个范围,因此它们不会 与其他块中的上下文冲突。

所以第一个块中的标签调用container_content

<div class="well" {% ng_controller 'CreateEdictController' 'js/controllers/create-edict-controller.js' %}>

在第二个块中被忽略和丢失,angular_inclusion

【讨论】:

    猜你喜欢
    • 2013-01-21
    • 2011-02-09
    • 2018-10-21
    • 2020-04-12
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    相关资源
    最近更新 更多