如何在Flask蓝图中从多个template_folder加载模板?

10

我学会了如何创建Flask蓝图,并可以为不使用Flask的产品创建蓝图,这些产品使用Jinja2模板,并在Flask项目中使用它们。我像这样做:

# blueprint code
from flask import Blueprint
from pkg_resources import resource_filename
app = Blueprint('formgear', __name__, 
                template_folder=resource_filename('formgear', 'templates'))

现在我想添加另一组模板,它与我的非Flask项目逻辑上相连,但仅针对Flask。我完全不确定这是否是良好的设计,但有没有办法从一个蓝图中传播两个模板文件夹?并使整个Flask项目都可以使用这两个模板集?

注意:formgear 是我的非Flask项目的名称。


1
我的回答解决了你的问题吗? - pyfunc
1个回答

10
以下是调查的轨迹。
从flask.blueprints开始。
class Blueprint(_PackageBoundObject):
    ....
    def __init__(self, name, import_name, static_folder=None,
                 static_url_path=None, template_folder=None,
                 ...)
        _PackageBoundObject.__init__(self, import_name, template_folder)
    ....

来自flask.helpers

@locked_cached_property
def jinja_loader(self):
    """The Jinja loader for this package bound object.

    .. versionadded:: 0.5
    """
    if self.template_folder is not None:
        return FileSystemLoader(os.path.join(self.root_path,
                                             self.template_folder))

调查结果:

  1. 传递给 Blueprints 的 template_folder 随后被传递给类 _PackageBoundObject
  2. 它被视为单个字符串,而不是文件夹列表

结果:

  1. 您不能传递多个路径以用作 template_folder

1
还没有人提交错误报告/功能请求吗? - Wolfgang Fahl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接