Django模板标签仅修改一个块

时间:2016-02-08 14:12:00

标签: python django django-templates

我制作了一个模板标签,目的是简化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 %}

继承根模板的模板是这个

{% 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 }},但不能在第二个块中访问。如何确保上下文操作也影响第二个块呢?

1 个答案:

答案 0 :(得分:0)

  

上下文中的变量范围

     

上下文中设置的任何变量只能在同一个中使用   分配给它的模板块。这种行为是   故意的;它为变量提供了一个范围,以便它们不会   与其他区块的背景冲突。

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

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

在第二个区块angular_inclusion

中被忽略并丢失