Зачем загружать статические файлы для каждого шаблона, даже если он расширен?

У меня есть файл 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 не загружается из-за статического var. Он не загружается, даже если я расширяю base.html, которые имеют {% load staticfiles %} внутри шаблона. Наконец, я решил проблему добавить еще один {% load staticfiles %} в index.html.

Мой вопрос в том, почему мы должны добавить {% load staticfiles %} для каждого используемого шаблона, даже если мы расширим файл, который уже имеет его?

Ответ 1

В соответствии с последней версией Django , это делается для удобства и разумности

При загрузке пользовательского тега или библиотеки фильтров теги/фильтры только доступный для текущего шаблона - ни один родитель или ребенок шаблонов по пути шаблона-наследования.

Например, если шаблон foo.html имеет {% load humanize%}, то дочерний шаблон (например, тот, у которого {% extends "foo.html" %}) не будет доступ к шаблонам и фильтрам гуманизировать шаблон. Детский шаблон несет ответственность за свой собственный {% load humanize%}.

Это функция для удобства и разумности.

Ответ 2

Так как работают теги шаблонов. Вам нужно загрузить каждую библиотеку для каждого файла шаблона, который их использует.

Ответ 3

Логично, что вам понадобится {% load staticfiles %}, где бы вы не захотели использовать расширение URL. Если это происходит как в base.html, так и index.html, вам нужно будет включить его в оба места (как вы уже поняли).