Flask报错flask: jinja2.exceptions.TemplateNotFound error的解决方法

Flask使用render_template()方法来渲染模板,可以在这个函数中指定模块和传值到模块,在实际开发中,我们一般使用工厂函数来注册蓝图,同时也是在在工厂函数文件中获取app实例,然后直接注册到应用工厂中,看看我的flask应用目录

微信截图_20190925110709.jpg

如果我选择在入口文件实例化flask实例,那么是这样

from flask import Flask
from flask_script import Manager,Server,prompt_bool
from app.application import create_app
from app.utils import db
app = Flask(__name__)
app = create_app(app)
manager = Manager(app)

manager.add_command("runserver", Server(host='127.0.0.1', port=5000, use_debugger=True))

if __name__ == "__main__":
    manager.run()

我的工厂函数是

def create_app(app):
    app.secret_key = 'abc...cba!@#'
    app.config.from_pyfile('config.py')
    configure_db(app)
    db.init_app(app)
    configure_mail(app)
    mail.init_app(app)
    configure_logger(app)
    register_blueprint(app)
    return app

此时我们的模块目录在app目录外,app同级目录需要创建templates文件夹来存放模块文件

如果我们在工程函数内实例化flask获取app对象直接注册到工厂函数中,那么这么写

from flask import Flask
from app.web import web
from app.utils import db,mail
import logging
import time
import os
app = Flask(__name__)
app.secret_key = 'abc...cba!@#'
app.config.from_pyfile('../config.py')

def create_app():
    configure_db(app)
    db.init_app(app)
    configure_mail(app)
    mail.init_app(app)
    configure_logger(app)
    register_blueprint(app)
    return app

然后入口文件create_app函数中的app参数去掉,此时的模板目录就发生了改变,而是默认在app下的templates目录,不然会抛出错误

jinja2.exceptions.TemplateNotFound: web/index.html


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/716.html

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。