我今天才遇到这个问题-不是OP发布的文档问题,而是上面链接的stackoverflow问题中提到的问题,稍后将在这些评论中进行讨论。我同意@TRII-从树的下面覆盖一个蓝图的模板是有意义的,但是来自不同蓝图的模板彼此冲突似乎是错误的。当你render_template从蓝图中加载模板时,为什么其他蓝图的templates文件夹会包含在搜索路径中?能够从另一个蓝图覆盖蓝图的模板是否有用?
render_template
templates
通过阅读和思考,我想我已经弄清楚了它是如何工作的:存在一个用于模板的全局名称空间,每个蓝图的模板文件夹都位于该名称空间的根目录。这是一个简单的系统,很不错,但是这意味着,如果要将模板放在自己的命名空间中,则必须将它们放在一个子文件夹中,该子文件夹的名称对于蓝图而言是唯一的。实际上,你使用蓝图的名称。我想这是不是说不好-最红宝石的宝石的结构是这样的,例如,用Foo::Bar::Baz在文件中是foo/bar/baz.rb。如果你要创建名为的蓝图admin,则只需将模板从admin/templates/移到较深的文件夹admin/templates/admin/。对于我碰到迄今为止的情况下,这将是更直观地在文件中admin/templates只是假定admin已经位于自己的名称空间中。但这没什么大不了的。
Foo::Bar::Baz
foo/bar/baz.rb
admin/templates/
admin/templates/admin/
admin/templates
更大的问题是,为了在此系统下为你的蓝图引用模板,你必须使用模板的全局名称(admin/home.html在这种情况下)。这意味着蓝图中文件中的蓝图名称有很多重复,从render_templatepython中的调用到jinja中的includeand extends标签。如果我们能避免所有重复,那将是很好的。
admin/home.html
render_templatepython
includeand extends
这是一个错误。 模板渲染器不得使用其他人的蓝图模板文件夹制作页面。 在模板子文件夹中复制蓝图的名称没有任何意义, 我已经制作了分开的蓝图来分别处理索引页
它本身不是错误。
但这确实取决于你的应用程序的结构是否有用,在我看来,在大多数情况下它没有用,并且将模板名称自动包含在模板文件夹中会很有意义。
幸运的是,与使用蓝图名称相比,你可以以更加灵活的方式轻松地自己实现此目的。
(我不介意在Flask本身中为此提供一个选项,因为那样的话,像PyCharm这样的IDE可能会支持它,而不是无法向我显示编辑视图功能正在渲染的模板的链接)