2016-08-17 23 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') 
配置它