除非我做错了,看起来如果您有嵌套模板(例如[status, result] = system(fullfile('C:', 'Program Files', 'Internet Explorer', 'iexplore.exe &'));
模板中的模板),您有时需要在多个“层”中调用{% include %}
鸟巢。例如,假设我有{% load static %}
:
templateA.html
然后在`templateB.html中,我有:
{% load static %}
<a href={% static "some/path" %}>Some Link</a>
{% include 'templateB.html' %}
据我测试,我必须在两个模板中加入{% load static %}
<a href={% static "some/other/path" %}>Some Other Link</a>
,因为{% load static %}
不知道我已经加载了templateB.html
标记。
我的问题是:
假设有必要加载{% static %}
标记两次(或更多次,具体取决于嵌套量),是否会因此额外加载而导致性能下降?
我不确定Django在加载此标记时会做什么,但我的直觉是你不想加载和重新加载静态文件。 (由于我们讨论的是一个开源项目,我实际上已经尝试来了解这个{% static %}
是如何实现的,但事实证明这有点超出了我的理解范围。 ..)。
此外,此问题假定必须始终以这种方式加载标记。如果我遗失了一些东西,我会非常有兴趣了解更多。谢谢!
答案 0 :(得分:3)
您必须在每个模板中编写标记。在性能方面,您无需担心,因为它从不重新加载或加载单独的静态文件副本。
答案 1 :(得分:1)
没有开销。 local.xml
不会加载和重新加载静态文件&#34 ;;它只是在staticfiles templatetags库中提供(已经加载的)代码,以便在模板中使用。
答案 2 :(得分:1)
通过使用加载,您可以将某些应用中的标记和过滤器添加到当前模板的上下文中。它只是为解析器调用parser.add_library()
并更新此特定模板的标记和过滤器列表。您可以查看this method,然后从load tag调用它
如果您不想加载某些内容,可以将其添加到内置版中。对于Django 1.9,你可以像这样配置它
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'builtins': ['django.templatetags.static'],
},
},
]
和旧版本
from django.template.loader import add_to_builtins
add_to_builtins('django.templatetags.static')