从静态文件夹中使用 jinja 导入 javascript 个文件
Import javascript files with jinja from static folder
我需要访问 javascript 文件中的 jinja 模板(由于 i18n 标签)。所以我发现的方法是从 jinja 方法中加载包含 include 的 js 文件。 {% include "file.js" %}
但是,此方法将仅在模板文件夹中查找文件。但是 js 文件必须在静态文件夹中。我的问题是,如何更改 jinja 查找文件的方式?在这种情况下,不是在模板文件夹中搜索,而是在静态文件夹中搜索。
{% block javascript %}
<script type="text/javascript">
{% include "myscript.js" %}
</script>
{% endblock %}
如果您需要将文件视为模板,那么它不是静态的。将其放入模板文件夹并进行渲染。如果文件 不是 动态的,那么它就是静态的。将它放在静态文件夹中并 link 到它。没有要求给定类型的文件 必须 是模板或静态文件。选择需要的一个。
另一方面,保持 JS 静态并向其传递参数可能更好,而不是根据不同的输入生成不同的代码。
给出一个如下所示的示例目录结构
app/static/css/bootstrap.min.css
app/static/js/bootstrap.min.js
app/templates/test_page.html
app/views
run_server
您可以在创建应用程序对象时设置烧瓶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 路径,但由于上面显示的是默认路径,所以我想展示一下,因为这是一个我很长时间都不知道的功能,可以有用。
您可以创建并注册一个全局函数:
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()
然后你可以像这样包含它(safe
-过滤器防止引号开始转义):
{% block javascript %}
<script type="text/javascript">
{{ static_include("myscript.js") | safe }}
</script>
{% endblock %}
我需要访问 javascript 文件中的 jinja 模板(由于 i18n 标签)。所以我发现的方法是从 jinja 方法中加载包含 include 的 js 文件。 {% include "file.js" %}
但是,此方法将仅在模板文件夹中查找文件。但是 js 文件必须在静态文件夹中。我的问题是,如何更改 jinja 查找文件的方式?在这种情况下,不是在模板文件夹中搜索,而是在静态文件夹中搜索。
{% block javascript %}
<script type="text/javascript">
{% include "myscript.js" %}
</script>
{% endblock %}
如果您需要将文件视为模板,那么它不是静态的。将其放入模板文件夹并进行渲染。如果文件 不是 动态的,那么它就是静态的。将它放在静态文件夹中并 link 到它。没有要求给定类型的文件 必须 是模板或静态文件。选择需要的一个。
另一方面,保持 JS 静态并向其传递参数可能更好,而不是根据不同的输入生成不同的代码。
给出一个如下所示的示例目录结构
app/static/css/bootstrap.min.css
app/static/js/bootstrap.min.js
app/templates/test_page.html
app/views
run_server
您可以在创建应用程序对象时设置烧瓶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 路径,但由于上面显示的是默认路径,所以我想展示一下,因为这是一个我很长时间都不知道的功能,可以有用。
您可以创建并注册一个全局函数:
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()
然后你可以像这样包含它(safe
-过滤器防止引号开始转义):
{% block javascript %}
<script type="text/javascript">
{{ static_include("myscript.js") | safe }}
</script>
{% endblock %}