【发布时间】:2016-07-06 09:27:17
【问题描述】:
我有一个带有蓝图的 Flask 应用程序。每个蓝图都提供了一些模板。当我尝试从第二个蓝图渲染 index.html 模板时,会渲染第一个蓝图的模板。为什么 blueprint2 会覆盖 blueprint1 的模板?如何渲染每个蓝图的模板?
app/
__init__.py
blueprint1/
__init__.py
views.py
templates/
index.html
blueprint2/
__init__.py
views.py
templates/
index.html
blueprint2/__init__.py:
from flask import Blueprint
bp1 = Blueprint('bp1', __name__, template_folder='templates', url_prefix='/bp1')
from . import views
blueprint2/views.py:
from flask import render_template
from . import bp1
@bp1.route('/')
def index():
return render_template('index.html')
app/__init__.py:
from flask import Flask
from blueprint1 import bp1
from blueprint2 import bp2
application = Flask(__name__)
application.register_blueprint(bp1)
application.register_blueprint(bp2)
如果我更改蓝图的注册顺序,那么 blueprint2 的模板会覆盖 blueprint1。
application.register_blueprint(bp2)
application.register_blueprint(bp1)
【问题讨论】:
-
你应该发布你的
__init__.py文件。 -
谢谢,现已发布。
-
我猜问题出在
Blueprint('bp1', ...你应该注册目录的全名就像Blueprint('blueprint1',一样 -
不是这样的,我改了名字但是没有任何新的事情发生。我发现我注册蓝图的顺序决定了显示哪个页面。我注册的第一个将覆盖第二个模板。
-
您是否尝试过更改
template_folder='templates'?也许到template_folder='blueprint2/templates'?还是给它一个完整的路径?