使用jinja2模板指令加载外部脚本

31 投票
2 回答
38872 浏览
提问于 2025-04-16 02:21

我刚接触jinja2和模板的使用,所以我想知道有没有简单的方法来加载外部的JavaScript。我在考虑使用:

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

但我忍不住想问:

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

2 个回答

4

这个问题虽然有点老了,但还有另一种有趣的方法可以尝试。我是在使用 Jinja2flask 的时候发现的。

我用了 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 语法的模板库,那就可能会出现问题。

撰写回答