Резюме:Как ссылаться статические файлы в шаблоне рули-Джанго
Как я должен ссылаться на статические файлы в руле-части в шаблоне Django? Я могу использовать рули, если я использую теги verbatim
, но тогда я не могу использовать тег static
django.
Подробности
При преобразовании приложения в Django, я наткнулся на той части, которая использует handelbars.js
для визуализации Ajax-призывного результаты. Via, среди прочих, «Handlebars.js in Django templates« Я узнал о теге {% verbatim %}
.
Простой кусок руля прекрасно работает с этим. Но у меня также есть часть, где изображения динамически показаны на основании результата, который выглядит примерно так:
<img src="path/{{ result }}.png">
Теперь в то время как это работает хорошо, если я установить путь вручную, я считаю, в Django это хорошая практика ссылаться на статические файлы так:
<img src="{% static 'path/file.png' %}">
Просто получить постоянный static_url
не рекомендуется, see for instance this blog
так что, если кто-то не имеет реальную убедительную причину, чтобы исправить это иначе, я считаю, что лучше всего использовать {% static %}
способ.
Наивное решение было бы объединить 2 техники и буквально спрей шаблона с дословным/endverbatim. Помимо того факта, что это выглядит уродливым, неразборчивым и с самого начала кажется плохим, оно также не работает.
{% verbatim %}
<!-- handlebars -->
{% endverbatim %}
<img src="{% static 'path{% verbatim %}{{ result }}{% endverbatim %}' %}">
{% verbatim %}
<!-- handlebars -->
{% endverbatim %}
Это заканчивается в слезах, так как результат
TemplateSyntaxError в/
Не удалось разобрать остаток: '' путь {% 'от '' пути {%'
Возможно, можно создать правильный статический URL-адрес на стороне сервера и отобразить его. Но бэкэнд не должен знать, какой образ мы хотим показать в шаблоне.
Только решение может заключаться в дополнительном вызове к серверу с «относительной» строкой (например, path/result.png
) на бэкэнд и запросить правильную статическую ссылку? Это не так сложно, но требует дополнительного вызова, чего не должно быть.
Как правильно ссылаться на эти статические файлы?
Аргументы против использования 'STATIC_URL' в сообщении блога, на котором вы ссылаетесь, не кажутся подходящими для вашего прецедента. На самом деле, я бы сказал, наоборот, потому что вы явно хотите только статический URL-префикс. Остальная часть URL-адреса (часть имени файла) создается на стороне клиента с помощью шаблона handlebars. Также обратите внимание, что существует тег шаблона ['get_static_prefix'] (https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#get-static-prefix), который обертывает для вас' STATIC_URL'. – solarissmoke
Я не уверен, что согласен. Я хочу переменную часть изображения (часть имени), которая исходит от json, и обрабатывается ручками. Но этот образ используется как статический файл django, поэтому я хочу, чтобы django решил, что на самом деле будет продолжаться. Нет причин, чтобы пример кэширования в нижней части ссылки недействителен в моей ситуации -> Если я хочу их кэшировать, то рули не будут знать об этом. Таким образом, в конце дескрипторы знали бы только о «относительной» части статического файла, и насколько я вижу, все аргументы в этом блоге актуальны? – Nanne
Затем важно использовать правильное статическое создание URL для JSON? Я не вижу, как это помогает для шаблона дескриптора - фактический путь к файлу (то есть кэширование/другой бэкэнд для хранения/etc) будет сгенерированной клиентской стороной. – solarissmoke