我有一个Flask蓝图包结构如下:
application/
-- __init__.py
-- extensions.py
-- authentication/
-- templates/
-- register.html
-- __init__.py
-- views.py
templates/
-- base.html
static/
main.py
database.db
在我的authentication/__init__.py
中:
from flask import Blueprint
authentication = Blueprint("authentication", __name__, template_folder="templates")
from . import views
在我的authentication/views.py
中:
# REGISTER PAGE
@authentication.route('/register', methods=['GET', 'POST'])
def register():
...
return render_template("register.html", form=form)
在我的app/__init__.py
中:
def create_app():
# INSTANTIATE APP
app = Flask(__name__)
...
app.register_blueprint(authentication, url_prefix="/")
...
有人知道什么是错的,为什么我在注册页面上得到jinja2.exceptions.TemplateNotFound: base.html
?
我尝试过停止和重新启动,将base.html
放在authentication.templates
中,但一旦它在root.templates
中,它就会被写为未找到。
1条答案
按热度按时间w80xi6nr1#
Flask默认情况下只会从根/templates文件夹加载模板。从您提供的代码中,根文件夹是/application文件夹,因此它会尝试从/application/templates文件夹加载base.html模板,而不是当前存在的/templates文件夹。您需要将templates文件夹移动到/applications文件夹,以便它能够按照当前实现的方式工作。
在您的代码中设置下面列出的Blueprint参数,将只会将其设置为除了上面指定的默认文件夹路径/application/templates之外,还在/application/authentication/templates文件夹中查找模板:
template_folder=“模板”
如果要为Blueprint指定上一级的文件夹/应用程序,则必须编辑Blueprint参数,如下所示:
template_folder='../../templates'
../在文件结构中向上移动了一层,所以你向上移动了两层,到达了你最初列出的base.html模板的位置。这样做的原因是蓝图的路径是相对于蓝图所在的文件夹的,该文件夹在你代码中templates/base.html文件夹的两层以下。