之前我们写的url和视图都是在一个文件中,这对于小项目来说是没有什么问题,但如果项目大了,url和视图有很多,如果都放在一个文件中就不太方便管理了。因此我们将他们按照不同的功能进行模块化分离。而蓝图能够帮助我们实现这个需求。
1、编写蓝图
新创建一个蓝图文件(py文件),在该蓝图文件中编写蓝图
写蓝图需要导入Blueprint模块
from flask import Blueprint
book_bp = Blueprint('book', __name__, url_prefix='/book')
# url_prefix是url前缀
@book_bp.route('/')
def book():
return '这是图书页面'
@book_bp.route('/page' )
def book_page(page):
return '这是图书的第%s页' % page
2、在主程序中进行蓝图的导入与注册
用app.register_blueprint()方法进行注册
导入:
from blue_print.blueprints.book import book_bp
注册:
app.register_blueprint(book_bp)
注册完成后,访问时输入/book,即可执行蓝图里面编写的视图函数。
蓝图默认不设置模板文件的路径,当然,蓝图可以设置模板路径:(template_folder)
book_bp = Blueprint('book', __name__, url_prefix='/book', template_folder='templates')
蓝图在渲染模板时(无论设置不设置template_folder)会先从项目根目录的templates文件夹中寻找,如果没有,才会到蓝图文件所在目录下的templates文件夹(或者设置的template_folder)中查找。
与模板文件一样,蓝图默认不设置静态文件的路径,也可以设置静态文件的路径:(static_folder)
economy_bp = Blueprint('economy', __name__, url_prefix='/economy', template_folder='sleet', static_folder='static')
寻找静态文件的方式和寻找模板文件类似,会先从项目根目录的static文件夹中查找,没有找到则去蓝图文件所在目录的static文件夹中查找。
寻找静态文件和寻找模板文件不一样的两个地方是:
1、即使你修改了静态文件的路径(如不是static文件夹),你在模板中引用静态文件时,引用的路径还是得写static。
2、如果静态文件是在蓝图文件所在目录下,在模板中引用则需写 ‘蓝图名.static’
在蓝图中如果在主程序中要用url_for返回视图函数的路径,需要这样写:
url_for(‘l蓝图名.视图函数名’,[参数])
url_for('book.book_page',page=2)
当然,需要进行蓝图的注册后,url_for才会有返回结果