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

问题描述:

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

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

这似乎并不可能与正常include指令和url_for。如果我需要一个自定义函数,我该如何去写它? (在另一个线程上有related example,但我不太了解这个代码。)

+1

为什么你要做到这一点?如果该文件用于模板,请将其放入模板文件夹中。否则,将其作为静态文件提供。 – davidism

+0

@davidism感谢您的现实检查。关于将内嵌脚本放在模板文件夹中,您可能会说出一些逻辑,我可能最终会这样做。但是,将所有js文件放在一起也是有逻辑的。 – bongbang

+0

如果你想内联JS,那很好,但是如果你想这样做,那就把它放在templates文件夹中。如果您打算将它们用作模板,则无法将它们放入静态文件夹中。 – davidism

那么,您可以将您的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>