代码之家  ›  专栏  ›  技术社区  ›  elethan

多次加载Django静态标记的性能影响

  •  3
  • elethan  · 技术社区  · 8 年前

    除非我做错了,否则似乎您有嵌套模板(即。, {% include %} 模板中的模板),有时需要调用 {% load static %} templateA.html :

    {% load static %}
    <a href={% static "some/path" %}>Some Link</a>
    {% include 'templateB.html' %}
    

    然后在`templateB中。html,我有:

    {% load static %}
    <a href={% static "some/other/path" %}>Some Other Link</a>
    

    据我从测试中所知,我必须包括 {%load静态%} 在两个模板中,因为 templateB.html 不知道我已经加载了 {% static %} 标签

    假设有必要加载 {%静态%} 标记两次(或更多次,取决于嵌套的数量),额外加载是否会影响性能?

    我不知道Django在加载这个标记时会做什么,但我的直觉是,您不想加载和重新加载静态文件。(因为我们谈论的是一个开源项目,我实际上是这样做的 尝试 我自己看看引擎盖下面 templatetag 实现了,但事实证明它有点超出我的理解……)。

    此外,这个问题假定必须始终以这种方式加载标记。如果我缺少什么,我会很有兴趣了解更多。非常感谢。

    3 回复  |  直到 8 年前
        1
  •  4
  •   Aamish Baloch    8 年前

    您必须在每个模板中写入标记。在性能方面,您不必担心,因为它从不重新加载或加载静态文件的单独新副本。

        2
  •  2
  •   Daniel Roseman    8 年前

    没有开销。 load static 不“加载和重新加载静态文件”;它只是使staticfilestemplatetags库中的(已经加载的)代码可以在模板中使用。

        3
  •  2
  •   Nikolay Osaulenko    8 年前

    通过使用加载,您可以将某些应用程序中的标记和筛选器添加到当前模板的上下文中。它只是打电话 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')