Python 使用jinja从静态文件夹导入javascript文件

Python 使用jinja从静态文件夹导入javascript文件,python,flask,jinja2,template-engine,Python,Flask,Jinja2,Template Engine,我需要访问javascript文件中的jinja模板(由于i18n标记)。我发现的方法就是从jinja方法加载js文件,其中包含include{%include“file.js”%} 但是,此方法将仅查找templates文件夹中的文件。但是js文件必须在静态文件夹中。我的问题是,如何改变jinja查找文件的方式?在本例中,不是在templates文件夹中搜索,而是在static文件夹中搜索 {% block javascript %} <script type="text/jav

我需要访问javascript文件中的jinja模板(由于i18n标记)。我发现的方法就是从jinja方法加载js文件,其中包含include<代码>{%include“file.js”%}

但是,此方法将仅查找templates文件夹中的文件。但是js文件必须在静态文件夹中。我的问题是,如何改变jinja查找文件的方式?在本例中,不是在templates文件夹中搜索,而是在static文件夹中搜索

{% block javascript %}
    <script type="text/javascript">
        {% include "myscript.js" %}
    </script>
{% endblock %}
{%block javascript%}
{%include“myscript.js”%}
{%endblock%}

如果需要将文件视为模板,那么它不是静态的。将其放在templates文件夹中并进行渲染。如果文件不是动态的,那么它是静态的。将它放在静态文件夹中并链接到它。不要求给定类型的文件必须是模板或静态文件。挑一个必要的


另一方面,最好保持JS静态并向其传递参数,而不是根据不同的输入生成不同的代码。

给出了如下示例目录结构

app/static/css/bootstrap.min.css
app/static/js/bootstrap.min.js
app/templates/test_page.html
app/views
run_server
<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">

 I am an HTML body

<script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>
创建应用程序对象时,可以设置flask
静态\u url\u路径

app = Flask(__name__, static_url_path='/static')
然后在
test_page.html
中,您可以得到如下内容

app/static/css/bootstrap.min.css
app/static/js/bootstrap.min.js
app/templates/test_page.html
app/views
run_server
<link href="{{ url_for('static', filename='css/bootstrap.min.css') }}" rel="stylesheet">

 I am an HTML body

<script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>

我是一个HTML主体

虽然不需要设置静态URL路径,但由于上面显示的是默认路径,因此我想显示它,因为这是我很长时间不知道的功能,可能很有用。

您可以创建并注册一个全局函数,只需这样做:

import os

app = Flask(__name__.split('.')[0])

@app.template_global()
def static_include(filename):
    fullpath = os.path.join(app.static_folder, filename)
    with open(fullpath, 'r') as f:
        return f.read()
然后您可以这样包含它(安全的
过滤器防止引号开始转义):

{%block javascript%}
{{static_include(“myscript.js”)| safe}
{%endblock%}
如果将文件放在静态目录中,则可以使用