Подтвердить что ты не робот

Django: невозможно ли использовать статический тег в блочном теге?

Нижеприведенный код делает ошибку. Как я могу решить эту проблему?

Заранее спасибо:)

{% block header %}
    <link rel="stylesheet" href="{% static 'shop/style.css' %}" />
{% endblock %}

Выход ошибки:

  • TemplateSyntaxError: недопустимый тег блока: "статический", ожидаемый "endblock"
4b9b3361

Ответ 1

Нет, это невозможно. Попробуйте включить {% load staticfiles%} в один и тот же html файл, а не пытаться наследовать его от некоторого base.html.

Ответ 2

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' %}"

Ответ 3

Мое решение заключается в 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 %} нашим спасителем в такой ситуации.

Ответ 4

Просто добавьте {% load static %} в начало вашего шаблона после {% extends 'app/base.html' %}.

Ответ 5

Да. Django не допустит этого.

Вы можете просто использовать соответствующий путь, например:

<link rel="stylesheet" href="/static/shop/style.css" />

Но имейте в виду: если вы меняете свое приложение STATIC_URL, надпись href выше также должна быть соответствующим образом обновлена.

От Настройка статических файлов:

В ваших шаблонах, либо hardcode url like/static/my_app/example.jpg, либо, желательно, использовать тег статического шаблона...