27

我对 jinja2 和一般模板的使用非常陌生,所以我想知道是否有一种简单的方法来加载外部 javascript。我正在考虑使用:

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

但我忍不住要问:

有没有办法直接从模板指令中加载这个脚本?

4

2 回答 2

42

您在这里有两个选择 - 第一个是您执行此操作的方式 - 只需将适当的标记添加到模板中(或者如果您希望能够在扩展您的第一个模板的模板中覆盖它,则添加一个块。)

第二种方式是使用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 模板库,那么很可能会出现问题。

于 2010-08-10T02:27:40.600 回答
4

这个问题已经很老了,但是还有另一种方法也可能很有趣。我在使用Jinja2flask时发现了它。

我使用了url_for()它,它工作正常:

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

myscript.js我的静态文件夹中有我的。在 Jinja2 环境中指定,或者默认在烧瓶中。

于 2018-04-17T20:00:12.143 回答