Резюме:
Как мне ссылаться на статические файлы в части руля в шаблоне django? Я могу использовать руль, если использую теги verbatim
, но тогда я не могу использовать тег static
django.
Подробности
При преобразовании приложения в Django я наткнулся на часть, которая использует handelbars.js
для рендеринга результатов вызова ajax. Через, среди прочего, «Handlebars.js в шаблонах Django» я узнал о {% verbatim %}
тег.
С этим отлично подойдет простой руль. Но у меня также есть часть, в которой изображения динамически отображаются в зависимости от результата, который выглядит примерно так:
<img src="path/{{ result }}.png">
Теперь, хотя это нормально работает, если я задаю путь вручную, я считаю, что в Django рекомендуется ссылаться на ваши статические файлы следующим образом:
<img src="{% static 'path/file.png' %}">
Не рекомендуется просто получать константу static_url
, см., Например, этот блог
Поэтому, если у кого-то нет реальной веской причины исправить это иначе, я считаю, что лучше всего использовать метод {% static %}
.
Наивным решением было бы объединить две техники и буквально окрасить шаблон дословно / окончательно. Помимо того, что это выглядит некрасиво, неразборчиво и с самого начала кажется плохой идеей, это еще и не работает.
{% verbatim %}
<!-- handlebars -->
{% endverbatim %}
<img src="{% static 'path{% verbatim %}{{ result }}{% endverbatim %}' %}">
{% verbatim %}
<!-- handlebars -->
{% endverbatim %}
Это заканчивается слезами, потому что в результате
TemplateSyntaxError в /
Не удалось проанализировать остаток: '' путь {% 'от' 'путь {%'
Возможно, удастся сгенерировать правильный статический URL-адрес на стороне бэкенда и отобразить его. Но бэкэнд не должен знать, какое изображение мы хотим показать в шаблоне.
Единственным решением может быть дополнительный вызов бэкэнда с «относительной» строкой (например, path/result.png
) в бэкэнд и запросить правильную статическую ссылку? Это не так сложно, но требует дополнительного вызова, чего не должно быть.
Итак, как мне правильно ссылаться на эти статические файлы?
STATIC_URL
в сообщении блога, на которое вы ссылаетесь, не кажутся имеющими отношение к вашему варианту использования. Фактически, я бы сказал обратное, потому что вам явно нужен только статический префикс URL. Остальная часть URL-адреса (часть имени файла) создается на стороне клиента с помощью вашего шаблона ручек. Также обратите внимание, что существуетget_static_prefix
тег шаблона, который содержитSTATIC_URL
для вас. - person solarissmoke   schedule 09.07.2016