包含来自Flask模板中静态文件夹的文件
问题描述:
如何在Flask模板中包含“in-line”javascript以提高性能,但将代码保存在组织的静态文件夹中的单独文件中?像这样的东西就是我要找的东西。包含来自Flask模板中静态文件夹的文件
<script>
{% include_from_static 'in-line.js' %}
</script>
这似乎并不可能与正常include
指令和url_for
。如果我需要一个自定义函数,我该如何去写它? (在另一个线程上有related example,但我不太了解这个代码。)
答
那么,您可以将您的Flask项目的根目录传递到PackageLoader
。缺点是必须将每个文件加到template
和static
文件夹前。
app.py
from flask import Flask
from jinja2 import Markup, PackageLoader, Environment
app = Flask(__name__)
def include_file(name):
return Markup(loader.get_source(env, name)[0])
loader = PackageLoader(__name__, '')
env = Environment(loader=loader)
env.globals['include_file'] = include_file
@app.route('/')
def index():
return env.get_template('templates/page.html').render()
if __name__ == '__main__':
app.run()
静态/的script.js
console.log('hello world');
模板/ page.html中
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
</head>
<body>
<script type="text/javascript">
{{ include_file('static/script.js') }}
</script>
</body>
</html>
为什么你要做到这一点?如果该文件用于模板,请将其放入模板文件夹中。否则,将其作为静态文件提供。 – davidism
@davidism感谢您的现实检查。关于将内嵌脚本放在模板文件夹中,您可能会说出一些逻辑,我可能最终会这样做。但是,将所有js文件放在一起也是有逻辑的。 – bongbang
如果你想内联JS,那很好,但是如果你想这样做,那就把它放在templates文件夹中。如果您打算将它们用作模板,则无法将它们放入静态文件夹中。 – davidism