烧瓶加载蛋包装模板

时间:2017-11-01 16:44:52

标签: python flask egg modular

我正在创建一个模块化烧瓶应用程序,用于从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中读取这些模板?

(在开发模式下,如果没有打包蓝图,它可以正常工作,我还需要一种方法来加载蓝图时)

提前致谢。

1 个答案:

答案 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工作