我在note_extras.py
中加载了自定义模板标记base.html
。
<div id="wrap">
{% load note_extras %}
{% block content %}
{% endblock %}
</div><!--wrap-->
但是在base.html
ie ::
{% extends "base.html" %}
{% block content %}
<div class="container">
{% create_tagmenu request.user.pk %}
</div>
{% endblock %}
如果我在note_extras
加载home.html
即
{% extends "base.html" %}
{% load note_extras %}
....
答案 0 :(得分:4)
在Django模板语言中,您必须在每个模板中加载所有需要的模板库。
我个人认为这是一个好主意,因为它使模板更加明确(这比隐含更好)。我举个例子。在Django 1.5之前,url
标记的默认行为是以明文形式提供视图名称以及所有需要的参数:
{% url path.to.view ... %}
然而,无法通过上下文变量提供视图的路径:
{% with var='path.to.view' %}
{% url var ... %}
{% endwith %}
要解决此问题,从1.3开始,您可以通过执行以下操作导入url标记的未来版本(在1.5中成为默认值):
{% load url from future %}
{% url var ... %}
or
{% url 'path.to.view' ... %}
现在假设您需要创建一个模板,该模板将从您未创建的基本模板(例如django管理员基础模板之一)扩展。然后想象一下,在基本模板中它会有{% load url from future %}
。因此,如果没有任何明确的解释,模板中的{% url path.to.view ... %}
将无效。
当然这个例子不再重要了(从1.5开始),但希望它说明了模板中显式优于隐式的一点,这就是当前实现的原因。
答案 1 :(得分:1)
如果您希望在应用的 init 文件中为每个模板加载模板标记:
from django.template.loader import add_to_builtins
add_to_builtins('my_app.templatetags.note_extras')
答案 2 :(得分:1)
万一有人想知道,add_to_builtins
已过时,但仍然可以通过settings.TEMPLATES
为项目中所有模板加载标签-Django 1.9及更高版本支持,如下所述:
https://stackoverflow.com/a/59719364/2447803