在 Flask 模板中包含来自静态文件夹的文件
Include file from static folder in Flask template
如何将 "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()
static/script.js
console.log('hello world');
templates/page.html
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
</head>
<body>
<script type="text/javascript">
{{ include_file('static/script.js') }}
</script>
</body>
</html>
如何将 "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()
static/script.js
console.log('hello world');
templates/page.html
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
</head>
<body>
<script type="text/javascript">
{{ include_file('static/script.js') }}
</script>
</body>
</html>