我正在创建一个模块化烧瓶应用程序,用于从egg文件加载蓝图,但这些蓝图需要从这些包中渲染模板。
这就是我的项目的样子:
some folders/
templates/ #the base folders
static/
blueprints/
|- blueprint1.egg
| |- templates/ #inside the .egg
| |- some other folders/
| |- main.py
|- blueprint2.egg
|- templates/
|- some other folders/
|- main.py
my_flask_main.py
现在我可以从那些.egg中导入和注册相应的蓝图,但是如何从动态提取的.egg中加载这些模板,或者更好地直接从.egg中读取这些模板?
(在开发模式下,如果没有打包蓝图,它可以正常工作,我还需要一种方法来加载蓝图时)
提前致谢。
答案 0 :(得分:0)
经过一些研究和测试,经过几天我终于找到了一种方法:
bp_dummy = Blueprint('dummy', __name__, template_folder='templates')
bp_dummy.jinja_loader = jinja2.ChoiceLoader([
bp_dummy.jinja_loader,
jinja2.PackageLoader(__name__) # in the same folder will search the 'templates' folder
])
首先,在每个蓝图实例中,您必须定义模板文件夹路径,并覆盖默认的jinja2模板文件夹(默认情况下应该是FileSystemLoader),因此当打包模块时,默认加载器将失败,并且PackageLoader工作