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

Загрузка внешнего script с помощью директивы jinja2 template

Я очень новичок в jinja2 и использовании шаблонов в целом, поэтому мне было интересно, есть ли простой способ загрузить внешний javascript. Я думал об использовании:

{% block javascript %}
    <script src="myscript.js"></script>
{% endblock %}

Но я не могу не спросить:

Есть ли способ загрузить этот скрипт прямо из директивы шаблона?

4b9b3361

Ответ 1

Здесь у вас есть два варианта - первый способ, которым вы это сделали - просто добавьте соответствующую разметку в шаблон (или блок, если вы хотите иметь возможность переопределить ее в шаблонах, которые расширяют ваш первый шаблон.)

Второй способ - использовать функцию include Jinja2:

{% 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 перед отправкой - если вы не используете динамический контент, вы просто будете без необходимости обрабатывать файл для каждого запроса - и если Вы используете библиотеку шаблонов javascript с синтаксисом Jinja2, тогда проблема скорее всего.

Ответ 2

Этот вопрос довольно старый, но есть и другой способ сделать это, который также может быть интересным. Я нашел это во время работы с Jinja2 и колбой.

Я использовал url_for() и он отлично работает:

{% block javascript %}
    <script src="{{ url_for('static',filename='myscript.js') }}"></script>
{% endblock %}

И у меня есть мой myscript.js в моей статической папке. Указывается в среде Jinja2 или по умолчанию в колбе.