使用jinja2模板指令加载外部脚本
我刚接触jinja2和模板的使用,所以我想知道有没有简单的方法来加载外部的JavaScript。我在考虑使用:
{% block javascript %}
<script src="myscript.js"></script>
{% endblock %}
但我忍不住想问:
有没有办法直接在模板指令中加载这个脚本呢?
2 个回答
4
这个问题虽然有点老了,但还有另一种有趣的方法可以尝试。我是在使用 Jinja2 和 flask 的时候发现的。
我用了 url_for()
,效果很好:
{% block javascript %}
<script src="{{ url_for('static',filename='myscript.js') }}"></script>
{% endblock %}
而且我的 myscript.js
文件放在静态文件夹里。这是在 Jinja2 环境中指定的,或者在 flask 中默认就是这样。
45
这里你有两个选择——第一个就是你之前做的那样——直接在模板中添加合适的标记(或者如果你想在扩展你第一个模板的模板中覆盖它,可以用一个块)。
第二种方法是使用 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 语法的模板库,那就可能会出现问题。