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

如果我选择在入口文件实例化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/713
评论列表