Загрузка внешнего скрипта с Директивой шаблона Jinja2
Вопрос
Я очень новичок в Jinja2 и использование шаблонов в целом, поэтому мне было интересно, есть ли простой способ загрузить внешний JavaScript. Я думал об использовании:
{% block javascript %}
<script src="myscript.js"></script>
{% endblock %}
Но я не могу помочь спросить:
Есть ли способ загрузки этого сценария непосредственно из Директивы шаблона?
Решение
У вас есть два варианта - первый - это то, как вы это сделали - просто добавьте соответствующую разметку в шаблон (или блок, если вы хотите, чтобы он мог переопределить его в шаблонах, которые расширяют ваш первый шаблон.)
Второй способ - использовать Jinja2 include
Функция:
{% block javascript %}
<script type="text/javascript">
{% include "myscript.js" %}
</script>
<!-- The contents of myscript.js will be loaded inside the script tag -->
{% endblock %}
Преимущество использования include
Это то, что jinja2 будет обработать ваш JavaScript перед его включением - что означает, что вы можете иметь переменные в вашем JavaScript, что изменяется в зависимости от состояния вашей программы.
Недостатком использования include
Таким образом одинаково - ваш .js
Файл будет запущен через jinja2, прежде чем быть отправленным - если вы не используете динамический контент, вы просто будете обработать файл без необходимости для каждого запроса - и если вы используете библиотеку шаблонов шаблонов Jinja2 с синтаксисом Jinja2, то проблема, скорее всего.
Другие советы
Этот вопрос довольно старый, но есть еще один способ сделать это, что может быть интересно. Я нашел это во время работы с Jinja2. а также колбы.
Я использовал url_for()
И это работает нормально:
{% block javascript %}
<script src="{{ url_for('static',filename='myscript.js') }}"></script>
{% endblock %}
И у меня есть мой myscript.js
в моей статической папке. Указано в среде Jinja2 или по умолчанию в колбе.