html 另一个 flask 模板问题与蓝图

pinkon5k  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(102)

我有一个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中,它就会被写为未找到。

w80xi6nr

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文件夹的两层以下。

相关问题