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