Flask-蓝图

蓝图
之前我们写的url和视图函数都是处在同一个文件,如果项目比较大的话,这显然不是一个合理的结构,而蓝图可以优雅的帮我们实现这种需求。

我们在主程序中,通过app.register_blueprint()方法将这个蓝图注册进url映射中,以后访问/user/,/user/profile/,都是执行的user.py文件中的视图函数,这样就实现了项目的模块化。
以上是对蓝图的一个简单介绍,但是使用蓝图还有几个需要注意的地方,就是在蓝图如何寻找静态文件、模板文件,url_for函数如何反转url

寻找静态文件

默认不设置任何静态文件路径,Jinja2会在项目的static文件夹中寻找静态文件。也可以设置其他的路径,在初始化蓝图的时候,Blueprint这个构造函数,有一个参数static_folder可以指定静态文件的路径
在这里插入图片描述
static_folder可以是相对路径(相对蓝图文件所在的目录),也可以是绝对路径。在配置完蓝图后,还有一个需要注意的地方是如何在模板中引用静态文件。在模板中引用蓝图,应该要使用蓝图名+.+static来引用
在这里插入图片描述
寻找模板文件文件

跟静态文件一样,默认不设置任何模板文件的路径,将会在项目的templates中寻找模板文件。也可以设置其他的路径,在构造函数Blueprint中有一个template_folder参数可以设置模板的路径
在这里插入图片描述
模板文件和静态文件有点区别,以上代码写完以后,如果你渲染一个模板return render_template(‘admin.html’),Flask默认会去项目根目录下的templates文件夹中查找admin.html文件,如果找到了就直接返回,如果没有找到,才会去蓝图文件所在的目录下的templates文件夹中寻找。

url_for生成url:
用url_for生成蓝图的url,使用的格式是:蓝图名称+.+视图函数名称。比如要获取admin这个蓝图下的index视图函数的url
在这里插入图片描述
其中这个蓝图名称是在创建蓝图的时候,传入的第一个参数。
在这里插入图片描述
news.py

# @ Time : 2020/4/17 
# @ Author : Ellen

from flask import Blueprint,render_template

# url_prefix 路由是从news/开始的   相对路径
# news_bp = Blueprint('news', __name__, url_prefix="/news/", template_folder='lgcoder')
news_bp = Blueprint('news', __name__, url_prefix="/news/",static_folder='static')

# /news url_prefix  / => /news/
@news_bp.route("/")
def news():
    # return "新闻首页"
    return render_template("news.html")

# 1.寻找templates(优先) 目录下的模板文件,如果有则运行该目录下的模板文件
# 2.如templates不存在,template_follder存在,找在template_folder目录下的模板文件

book.py

from flask import Blueprint, url_for

book_bp = Blueprint('book', __name__, url_prefix="/book/")


@book_bp.route("/")
def book():
    print(url_for("book.book_detail", bid=3))
    return "图书首页"

@book_bp.route("/detail/<bid>")
def book_detail(bid):
    return "图书的ID %s" % bid

templates->news.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <link rel="stylesheet" href="{{ url_for('static',filename='news.css') }}">-->
    <link rel="stylesheet" href="{{ url_for('news.static',filename='news.css') }}">
</head>
<body>
    <h1>这是templates中的新闻首页</h1>
</body>
</html>

template_folder->news.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>这是蓝图中的新闻首页</h1>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值