Flask 蓝图资源

蓝图也可以提供资源。有时候你会只为它提供的资源而引入一个蓝图。

蓝图资源文件夹

像常规的应用一样,蓝图被设想为包含在一个文件夹中。当多个蓝图源于同一个文件
夹时,可以不必考虑上述情况,但也这通常不是推荐的做法。

这个文件夹会从 Blueprint 的第二个参数中推断出来,通常是 __name__
这个参数决定对应蓝图的是哪个逻辑的 Python 模块或包。如果它指向一个存在的
Python 包,这个包(通常是文件系统中的文件夹)就是资源文件夹。如果是一个模块,
模块所在的包就是资源文件夹。你可以访问 Blueprint.root_path 属性来查看
资源文件夹是什么:

>>> simple_page.root_path
'/Users/username/TestProject/yourapplication'

可以使用 open_resource() 函数来快速从这个文件夹打开源文件:

with simple_page.open_resource('static/style.css') as f:
    code = f.read()

静态文件

一个蓝图可以通过 static_folder 关键字参数提供一个指向文件系统上文件夹的路
径,来暴露一个带有静态文件的文件夹。这可以是一个绝对路径,也可以是相对于蓝图
文件夹的路径:

admin = Blueprint('admin', __name__, static_folder='static')

默认情况下,路径最右边的部分就是它在 web 上所暴露的地址。因为这里这个文件夹
叫做 static ,它会在 蓝图 + /static 的位置上可用。也就是说,蓝图为
/admin 把静态文件夹注册到 /admin/static 。

最后是命名的 blueprint_name.static ,这样你可以生成它的 URL ,就像你对应用
的静态文件夹所做的那样:

url_for('admin.static', filename='style.css')

模板

如果你想要蓝图暴露模板,你可以提供 Blueprint 构造函数中的
template_folder 参数来实现:

admin = Blueprint('admin', __name__, template_folder='templates')

像对待静态文件一样,路径可以是绝对的或是相对蓝图资源文件夹的。模板文件夹会
被加入到模板的搜索路径中,但是比实际的应用模板文件夹优先级低。这样,你可以
容易地在实际的应用中覆盖蓝图提供的模板。

那么当你有一个 yourapplication/admin 文件夹中的蓝图并且你想要渲染
'admin/index.html' 模板,且你已经提供了 templates 作为
template_folder ,你需要这样创建文件:
yourapplication/admin/templates/admin/index.html

作者:andy,如若转载,请注明出处:https://www.web176.com/flask2/21688.html

(0)
打赏 支付宝 支付宝 微信 微信
andy的头像andy
上一篇 2023年5月18日
下一篇 2023年5月18日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注