在Flask模板中包含静态文件夹中的文件

时间:2016-09-22 22:26:32

标签: flask jinja2

如何在Flask模板中包含“in-line”javascript以提高性能,但是将代码保存在组织的静态文件夹中的单独文件中?我正在寻找这样的东西。

<script>
{% include_from_static 'in-line.js' %}
</script>

使用普通include指令和url_for似乎无法做到这一点。如果我需要一个自定义函数,我该如何编写呢? (在另一个线程上有一个related example,但我不太了解这个代码的适应性。)

1 个答案:

答案 0 :(得分:0)

好吧,您可以将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()

静态/的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>