Загрузка внешнего скрипта с помощью директивы шаблона jinja2 - PullRequest
22 голосов
/ 05 августа 2010

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

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

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

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

Ответы [ 2 ]

34 голосов
/ 10 августа 2010

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

Второй способ - использовать функцию 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, то проблема, скорее всего, *. 1014 *

3 голосов
/ 17 апреля 2018

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

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

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

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

...