使用jinja从静态fold导入javascript文件

2024-04-28 03:50:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要访问javascript文件中的jinja模板(由于i18n标记)。所以我找到的方法就是从jinja方法加载包含的js文件。{% include "file.js" %}

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

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

Tags: 文件方法标记文件夹模板include方式js
3条回答

您可以创建并注册一个全局函数,只需执行以下操作:

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 %}
    <script type="text/javascript">
        {{ static_include("myscript.js") | safe }}
    </script>
{% endblock %}

给出一个如下所示的目录结构示例

app/static/css/bootstrap.min.css
app/static/js/bootstrap.min.js
app/templates/test_page.html
app/views
run_server

创建app对象时可以设置烧瓶static_url_path

app = Flask(__name__, static_url_path='/static')

然后在test_page.html中,您可以得到类似于

<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>

虽然不需要设置静态URL路径,但由于上面显示的是默认路径,所以我想显示它,因为这是一个我很久都不知道的功能,可能很有用。

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

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

相关问题 更多 >