2016-08-17 50 views
2

除非我做错了事情,看起来好像如果您有嵌套模板(即{% include %}模板中的模板),您有时需要在多个“图层”中调用{% load static %},的巢。例如,说我有templateA.html性能从加载Django静态标签多次点击

{% 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 static %},因为templateB.html不知道我已经加载了{% static %}标签。

我的问题是这样的:

假设有必要加载{% static %}标签两次(或根据嵌套的量更多次),有没有打算从这个额外的装载性能的下降?

我不确定Django在加载这个标签时会做些什么,但我的直觉是你不想加载和重新加载静态文件。 (因为我们正在谈论一个开源项目,我确实尝试了尝试来看看这个templatetag是如何实现的,但事实证明这有点超出我的理解......)。

此外,这个问题假设有必要总是以这种方式加载标签。如果有什么我错过了,我会非常有兴趣了解更多。谢谢!

回答

1

没有开销。 load static不会“加载并重新加载静态文件”;它只是提供staticfiles templatetags库中的(已经加载的)代码以供在您的模板中使用。

3

您必须在每个模板中写入标签。在性能的情况下,您不必担心,因为它永远不会重新加载或加载单独的静态文件的新副本。

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') 
配置它