Загрузка внешнего скрипта с директивой шаблона jinja2

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

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

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

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


person kirbuchi    schedule 05.08.2010    source источник


Ответы (2)


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

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

person Sean Vieira    schedule 10.08.2010
comment
Таким образом, это будет в основном включать все содержимое файла myscript.js между этими тегами, я прав? По какой причине я не мог использовать это для включения текстового файла или чего-то еще? - person kirbuchi; 10.08.2010
comment
@kirbuchi -- да, именно так. Применяются те же компромиссы. - person Sean Vieira; 10.08.2010
comment
Шон, спасибо за это. Можно ли включить из статической папки, или включение работает только из папки шаблонов? Я спрашиваю об этом, потому что myscript.js должен находиться в статической папке. - person anvd; 26.03.2015

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

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

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

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

person Sylhare    schedule 17.04.2018
comment
Код должен включать " перед {{ и после }}, т. е. src="{{ url_for('static',filename='myscript.js') }}", в противном случае это недействительный HTML. - person Jorge Leitao; 23.01.2019
comment
Спасибо, хороший улов ;) - person Sylhare; 23.01.2019