Django {% static 'path'%} в файле javascript

В моем script.js:

pic.src = "/static/photos/1.jpg"; // This works
pic2.src = "{% static 'photos/1.jpg' %}" // Does not work

Почему в мире это происходит? Поскольку в моем home.html работает {% static 'path'%}:

{% load staticfiles %}
<script src="{% static 'script.js' %}"></script>  // This works

И это {% load staticfiles%} или {% load static%}? Оба работают для меня, загружается script.js.

Ответ 1

Поскольку вы используете язык шаблонов django, вы можете ТОЛЬКО делать это в своем шаблоне между тегами <script>. Другими словами, если вы хотите использовать переменную javascript pic2.src в внешнем script, тогда вам нужно объявить ее между тегами <script>, как это показано

<script>
    var pic2.src = "{% static "photos/1.jpg" %}"
</script>

И затем вы можете получить доступ к нему во внешних сценариях, которые вы можете загрузить следующим образом:

<script type="text/javascript" src="{% static "js/my_external_script.js" %}"></script>

Относительно вашего вопроса относительно load static и load staticfiles существует небольшое различие. Оба выступают в качестве столяра для STATIC_URL в вашем settings.py и фактическом пути к самому файлу, поэтому оба должны работать для вашего дела. Подробнее см. здесь и здесь.

Ответ 2

Если вам понадобится много статического (или медиа) url в ваших файлах .js, это может быть более удобным:

<script>
    var static_url = "{% get_static_prefix %}";
    var media_url = "{% get_media_prefix %}";
</script>

Затем оба url свободно доступны во всех файлах javascript.

Ответ 3

Вы можете назначить путь в своем шаблоне, а затем использовать его в своем файле javascript.

Шаблон:

<script>
    var url = "{% static 'photos/1.jpg' %}";
</script>

JavaScript:

pic2.src = url