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

19

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

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

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

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

    
задан kirbuchi 05.08.2010 в 08:33
источник

2 ответа

30

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

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

    
ответ дан Sean Vieira 10.08.2010 в 04:27
  • Итак, это будет включать в себя все внутри файла myscript.js между этими тегами, я прав? Любая причина, по которой я не мог использовать это, чтобы включить текстовый файл или что-то еще? –  kirbuchi 10.08.2010 в 06:36
  • @kirbuchi - да, точно. Используются те же компромиссы. –  Sean Vieira 10.08.2010 в 09:22
  • Приятно! большое спасибо –  kirbuchi 10.08.2010 в 23:30
  • Шон, спасибо за это. Можете ли вы включить из статической папки, или включить только работает из папки шаблонов? Я спрашиваю об этом, потому что myscript.js должен находиться в статической папке. –  anvd 26.03.2015 в 13:07
0

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

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

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

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

    
ответ дан Sylhare 17.04.2018 в 22:00