Skip to content

二、蓝图

一、基本使用

这里以用户模块为例,注册一个蓝图

python
from flask import Blueprint
bp = Blueprint('user',__name__,url_prefix='/user')

@bp.route('/list')
def user_list():
	return "用户列表"

@bp.route('/profile/<user_id>')
def user_profile(user_id):
	return "用户简介"

首先从flask中导入了Blueprint类,然后使用该类初始化一个对象在初始化这个对象时传递了3个参数,3个参数的说明如下:

(1)蓝图名称:第1个参数是蓝图的名称,在使用url_for 反转蓝图中的某个视图时,需要用到蓝图名.视图名,如反转user_list,则代码为 url_for("user.user_list")

(2)模块名:第2个参数是模块名,一般设置为__name_,用于寻找模板文件和静态文件。

(3)URL前缀:第3个参数是URL 前缀,以后访问这个蓝图的所有 URL,都必须加上user 前缀,如获取用户列表的URL为/user/list

python
from user import bp as user_bp
...
app.register_blueprint(user_bp)

二、寻找模板

在蓝图中渲染模板,默认会从项目根路径下的templates 文件夹中寻找

如果想要更换寻找路径,可以在初始化 Blueprint对象时,通过传递template_folder参数实现

python
bp=Blueprint('user',name_,url_prefix='/user',template_folder='templates')

这样以后在渲染模板文件时,如return render_template("user.html"),

默认就会从项目的根路径下的templates文件夹中寻找user.html,如果没有找到,则再从蓝图所在的文件夹下的 templates 文件夹中寻找

三、寻找静态文件

默认是不设置任何静态文件路径的,Jinja2会在项目根路径下的static 文件夹中寻找静态文件。

在初始化 Blueprint 对象时,通过static_folder 参数可以指定静态文件的路径

python
bp=Blueprint('user', __name__,url_prefix='/user',static_folder 'static')

static_folder可以是相对路径(相对蓝图文件所在的目录),也可以是绝对路径

在配置完蓝图后,还需要注意如何在模板中引用静态文件。在模板中引用蓝图,应该使用蓝图名.static 的格式来引用

python
<link href="{{ url for('user.static',filename='about.css')}}"></link>