2013-01-03 4 views
10

Mam base.html plik, który ma kilka 'random' HTML kod i mam następujący kod:Dlaczego ładować pliki statyczne dla każdego szablonu, nawet jeśli jest on rozszerzony?

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

w moim pliku index.html przedłużyć base.html i załadować kilka dodatkowych javascript pliki:

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

problem polega na tym, że dodatkowy JavaScript nie lo reklama z powodu statycznego var. Nie ładuje się, nawet jeśli rozszerzam base.html, które mają {% load staticfiles %} wewnątrz szablonu. W końcu rozwiązałem problem dodając jeszcze jeden {% load staticfiles %} pod adresem index.html.

Moje pytanie brzmi: dlaczego powinniśmy dodać {% load staticfiles %} dla każdego używanego przez nas szablonu, nawet jeśli rozszerzymy plik, który już go posiada?

Odpowiedz

6

Zgodnie Django ostatnie documentation, odbywa się to ze względu na łatwość konserwacji i rozsądku

Podczas ładowania niestandardowy tag lub filtra biblioteki, tagi/Filtry udostępniane jedynie do prądu szablon - nie ma żadnego rodzica ani dziecka szablonów wzdłuż ścieżki do dziedziczenia szablonów.

Na przykład, jeżeli szablon foo.html ma {% humanizacji obciążenia%}, dziecko szablon (na przykład taki, który ma {% rozciąga „foo.html”%}) nie mają dostęp do humanizacji Tagi i filtry szablonów. Szablon podrzędny odpowiada za własny {% load humanize%}.

Jest to funkcja ze względu na łatwość konserwacji i zdrowie psychiczne.

+1

To powinna być zaakceptowana odpowiedź – Steve

3

Bo tak działają tagi szablonów. Musisz załadować każdą bibliotekę dla każdego pliku szablonu, który ich używa.

+2

Ale rozszerzam szablon, który uwzględnia obciążenie. Czy nie byłoby lepiej, gdyby działało pełne dziedzictwo zamiast ładowania biblioteki w każdym szablonie? – dastergon

0

Logiczne jest, że będziesz potrzebować {% load staticfiles %} wszędzie tam, gdzie ma się rozwijać rozszerzenie adresu URL. Jeśli tak się dzieje zarówno w base.htmlindex.html, będziesz musiał uwzględnić go w obu miejscach (jak już się zorientowałeś).