flask蓝图模板文件夹

我的flask应用程序布局为:

myapp/

run.py

admin/

__init__.py

views.py

pages/

index.html

main/

__init__.py

views.py

pages/

index.html

_ init _ .py文件为空。admin / views.py的内容是:

from flask import Blueprint, render_template

admin = Blueprint('admin', __name__, template_folder='pages')

@admin.route('/')

def index():

return render_template('index.html')

main / views.py与admin / views.py类似:

from flask import Blueprint, render_template

main = Blueprint('main', __name__, template_folder='pages')

@main.route('/')

def index():

return render_template('index.html')

run.py是:

from flask import Flask

from admin.views import admin

from main.views import main

app = Flask(__name__)

app.register_blueprint(admin, url_prefix='/admin')

app.register_blueprint(main, url_prefix='/main')

print app.url_map

app.run()

现在,如果我访问http://127.0.0.1:5000/admin/,它将正确显示admin / index.html。但是,http://127.0.0.1:5000/main/仍显示admin / index.html而不是main / index.html。我检查了app.url_map:

<Rule 'admin' (HEAD, OPTIONS, GET) -> admin.index,

<Rule 'main' (HEAD, OPTIONS, GET) -> main.index,

另外,我验证了main / views.py中的索引函数是否按预期方式被调用。如果我将main / index.html重命名为其他名称,那么它将起作用。因此,不重命名,如何实现1http://127.0.0.1:5000 / main / 1显示main / index.html?

回答:

从Flask 0.8开始,设计图将指定的template_folder添加到应用程序的搜索路径中,而不是将每个目录都视为单独的实体。这意味着,如果你有两个具有相同文件名的模板,则在搜索路径中找到的第一个模板就是所使用的模板。公认的是,这令人困惑,并且目前尚无记录。看来你并不是唯一对此行为感到困惑的人。

这种行为的设计原因是,可以轻松地从主应用程序的模板中覆盖蓝图模板,这些模板是Flask模板搜索路径中的第一行。

我想到两个选择。

  • 将每个index.html文件重命名为唯一的(例如admin.htmlmain.html)。
  • 在每个模板文件夹中,将每个模板放在blueprint文件夹的子目录中,然后使用该子目录调用模板。例如,你的管理模板将是yourapp/admin/pages/admin/index.html,然后从蓝图中以调用render_template('admin/index.html')

以上是 flask蓝图模板文件夹 的全部内容, 来源链接: utcz.com/qa/431104.html

回到顶部