我对jinja2和一般模板的使用都很新,所以我想知道是否有一种简单的方法来加载外部javascript。我在考虑使用:
{% block javascript %}
<script src="myscript.js"></script>
{% endblock %}
但我不禁要问:
有没有办法直接从模板指令中加载此脚本?
答案 0 :(得分:33)
这里有两个选择 - 第一个是您的选择 - 只需将相应的标记添加到模板中(如果您希望能够在扩展第一个模板的模板中覆盖它,则可以添加一个块。)
第二种方法是使用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模板库,则可能会出现问题。
答案 1 :(得分:3)
这个问题已经很老了,但还有另外一种方法可能也很有趣。我在使用 Jinja2 和 flask 时找到了它。
我使用url_for()
并且工作正常:
{% block javascript %}
<script src="{{ url_for('static',filename='myscript.js') }}"></script>
{% endblock %}
我的myscript.js
在我的静态文件夹中。在Jinja2环境中指定,或默认情况下在flask中。