Зачем загружать статические файлы для каждого шаблона, даже если он расширен?
У меня есть файл 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
, вам нужно будет включить его в оба места (как вы уже поняли).