我需要访问javascript文件中的jinja模板(由于i18n标签)。所以我发现的方式只是从jinja方法加载带有include的js文件。 {% include "file.js" %}
但是,此方法仅在模板文件夹中查找文件。但是js文件必须位于静态文件夹中。我的问题是,我怎样才能改变jinja查找文件的方式?在这种情况下,不是在模板文件夹中搜索,而是在静态文件夹中搜索。
{% block javascript %}
<script type="text/javascript">
{% include "myscript.js" %}
</script>
{% endblock %}
答案 0 :(得分:6)
如果您需要将文件视为模板,那么它不是静态的。将它放在模板文件夹中并渲染它。如果文件不是动态的,那么它是静态的。将它放在静态文件夹中并链接到它。不要求给定类型的文件必须是模板或静态文件。挑选任何一个必要的。
另一方面,保持JS静态并向其传递参数可能更好,而不是根据不同的输入生成不同的代码。
答案 1 :(得分:6)
给出一个看起来像这样的示例目录结构
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>
虽然不需要设置静态网址路径,但由于上面显示的是默认路径,我想展示它,因为它是我不了解的功能很长一段时间都很有用。
答案 2 :(得分:4)
您可以创建并注册一个全局函数:
distributions {
main {
//in here you can use from() to bring what you wish, files,
// artifacts from configurations, built projects etc
contents {
from(createDocs) {
into "docs"
}
from ({project(':subproject.aar').aar}) {
into "whatever"
}
from ("$buildDir/libs") //its always better to use a variable for the build directory imho
}
}
}
然后你可以像这样包含它(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