2013-01-03 39 views
10

我有一個base.html文件文件,其中有一些'隨機' 的HTML代碼和我有以下代碼:爲什麼爲每個模板加載靜態文件,即使它被擴展?

{% load staticfiles %} 
<!DOCTYPE html> 
<html> 
    <head> 
     ... 
    {% block extra_js_top %}{% endblock %} 
    </head> 
    ... 
</html> 

在我的index.html文件我延長base.html文件我加載一些額外的JavaScript文件

{% extends "base.html" %} 
... 
{% block extra_js_top %} 
    <script type="text/javascript" src="{% static "js/somejs.js" %}"></script> 
{% endblock %} 

的問題是,額外的JavaScript不LO廣告是因爲靜態變量。即使我擴展了base.html,它在模板中的{% load staticfiles %}也不會加載。最後我解決了這個問題,在index.html處再增加一個{% load staticfiles %}

我的問題是爲什麼我們應該爲每個我們使用的模板添加{% load staticfiles %},即使我們擴展了已經存在的文件?

回答

6

按照Django的最新documentation,這樣做是爲了維護和理智的緣故

當加載自定義標籤和過濾器庫,標籤/過濾器 只提供給當前做模板 - 不是父模板或子模板 沿着模板繼承路徑的模板。

例如,如果一個模板foo.html具有{%負載%人文化},子 模板(例如,一個具有{%延伸「foo.html」%})將不具有 訪問人文化模板標籤和過濾器。子模板 負責其自己的{%load humanize%}。

這是一個功能,爲了維護和理智。

+1

這應該是被接受的答案 – Steve

3

因爲這就是模板標籤的工作方式。您需要爲使用它們的每個模板文件加載每個庫。

+2

但我擴展了包含負載的模板。如果完全繼承工作,而不是在每個模板中加載庫,會不會更好? – dastergon

0

無論您想要進行網址擴展,無論您身在何處,都需要{% load staticfiles %}。如果您在base.html & index.html中發生這種情況,那麼您必須在兩個地方都包含它(正如您已經想到的那樣)。

相關問題