从 egg 包中加载模板
flask load templates from an egg package
我正在创建一个模块化的 Flask 应用程序,它从 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 中读取它们?
(当蓝图未打包时在开发模式下很明显,它有效,我需要一种方法在蓝图打包时加载它们)
提前致谢。
经过一些研究和测试,几天后我终于找到了一种方法:
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 有效。
我正在创建一个模块化的 Flask 应用程序,它从 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 中读取它们?
(当蓝图未打包时在开发模式下很明显,它有效,我需要一种方法在蓝图打包时加载它们)
提前致谢。
经过一些研究和测试,几天后我终于找到了一种方法:
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 有效。