我对 jinja2 和一般模板的使用非常陌生,所以我想知道是否有一种简单的方法来加载外部 javascript。我正在考虑使用:
{% block javascript %}
<script src="myscript.js"></script>
{% endblock %}
但我忍不住要问:
有没有办法直接从模板指令中加载这个脚本?
您在这里有两个选择 - 第一个是您执行此操作的方式 - 只需将适当的标记添加到模板中(或者如果您希望能够在扩展您的第一个模板的模板中覆盖它,则添加一个块。)
第二种方式是使用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 运行——如果你不使用动态内容,你只会为每个请求不必要地处理文件——如果你正在使用一个带有 Jinja2 语法的 javascript 模板库,那么很可能会出现问题。
这个问题已经很老了,但是还有另一种方法也可能很有趣。我在使用Jinja2和flask时发现了它。
我使用了url_for()
它,它工作正常:
{% block javascript %}
<script src="{{ url_for('static',filename='myscript.js') }}"></script>
{% endblock %}
myscript.js
我的静态文件夹中有我的。在 Jinja2 环境中指定,或者默认在烧瓶中。