在 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。缺点是您必须为每个文件添加前缀 templatestatic 文件夹。

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>