Ответ 1
Нет, это невозможно. Попробуйте включить {% load staticfiles%}
в один и тот же html файл, а не пытаться наследовать его от некоторого base.html
.
Нижеприведенный код делает ошибку. Как я могу решить эту проблему?
Заранее спасибо:)
{% block header %}
<link rel="stylesheet" href="{% static 'shop/style.css' %}" />
{% endblock %}
Выход ошибки:
Нет, это невозможно. Попробуйте включить {% load staticfiles%}
в один и тот же html файл, а не пытаться наследовать его от некоторого base.html
.
1.) в settings.py добавить A TUPLE:
STATIFILES_DIR = ( os.path.join(BASE_DIR, 'assets'), )
2.) в urls.py add:
from django.contrib.staticfiles.urls import staticfiles.urlpatterns
urlpatterns += staticfile_urlpatterns()
3.) в html файле, где вы помещаете ссылку link rel= 'style.. ", просто добавьте вверху:
{% load static from staticfiles %}
and then use :
<link rel="stylesheet" href="{% static 'assets/css' %}"
Мое решение заключается в include
другой странице с {% load static %}
и script со статической ссылкой. {% block xxx %}
ожидает, что первая {% yyy %}
не будет отличаться от {% include %}
и {% endblock %}
(единственные случаи, которые я наблюдал); поэтому, когда мы используем "{% static 'xxx.js' %}"
, он ломается и жалуется. Но в том числе другая страница поставит Django в спокойствие.
Например, у меня есть страница homepage
, которая расширяет base.html
и имеет некоторые статические js файлы, которые не включены в base.html
.
base.html
{% block page %}
{% endblock %}
{% block script %}
{% endblock %}
homepage.html
:
{% extends 'base.html' %}
{% block page %}
...
{% endblock %}
{% block script %}
{% include 'home_js.html'%} <!-- don't use static links here because Django does not like it. -->
{% endblock %}
home_js.html
:
{% load static %}
<script src="{% static 'scripts/jquery.js' %}" ></script>
<script>
function ...
</script>
Теперь скрипты загружаются.
Итак, в блоке мы не можем использовать теги {% %}
, отличные от {% block xxx %}
и {% endblock %}
.
Я использую Django 5.1.
EDIT:
Я нашел тэг {% verbatim %}
нашим спасителем в такой ситуации.
Просто добавьте {% load static %}
в начало вашего шаблона после {% extends 'app/base.html' %}
.
Да. Django не допустит этого.
Вы можете просто использовать соответствующий путь, например:
<link rel="stylesheet" href="/static/shop/style.css" />
Но имейте в виду: если вы меняете свое приложение STATIC_URL
, надпись href
выше также должна быть соответствующим образом обновлена.
От Настройка статических файлов:
В ваших шаблонах, либо hardcode url like/static/my_app/example.jpg, либо, желательно, использовать тег статического шаблона...