性能命中多次加载Django静态标记

时间:2016-08-17 14:37:57

标签: html django django-templates django-staticfiles

除非我做错了,看起来如果您有嵌套模板(例如[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 %}是如何实现的,但事实证明这有点超出了我的理解范围。 ..)。

此外,此问题假定必须始终以这种方式加载标记。如果我遗失了一些东西,我会非常有兴趣了解更多。谢谢!

3 个答案:

答案 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')