Flask框架——Bootstrap-Flask使用

上篇文章我们学习了Flask框架——应用错误处理,这篇文章我们来学习Flask框架——Bootstrap-Flask扩展。

对于css,html技术不熟练的人来说,想要快速创建简洁、美观又功能全面的页面是比较难的,这时我们就可以使用Bootstrap-Flask扩展,该扩展能让不熟练css、html的人也能快速的创建简洁、美观又功能全面的页面,让我们在前期不用花费太多的精力和CSS纠缠。

Bootstrap-Flask

Bootstrap-Flask是一个简化在Flask项目中集成前端开源框架Bootstrap过程的Flask扩展。使用Bootstrap可以快速的创建简洁、美观又功能全面的页面。

Bootstrap-Flask是为了替代不够灵活且缺乏维护的Flask-Bootstrap。它的主要设计参考了Flask-Bootstrap,其中渲染表单和分页部件的宏基于Flask-Bootstrap中的相关代码修改实现。

例如:我们可以使用Bootstrap中文网中的Bootstrap3中文文档的组件/Bootstrap4中文文档的组件快速生成简洁、美观又功能全面的页面,例如我们使用Bootstrap4组件的轮播图,如下图所示:


只需要把该代码复制到模板文件即可。

安装

安装方式如下:

pip install bootstrap-flask

注意:在同一个Flask项目中,不能同时存在Flask-Bootstrap和Bootstrap-Flask,当我们项目已经有了Flask-Bootstrap的话,需要卸载Flask-Bootstrap才能安装Bootstrap-Flask。

初始化

在Flask程序中初始化Bootstrap4如下所示:

from flask import Flask
from flask_bootstrap import Bootstrap4

app = Flask(__name__)
bootstrap = Bootstrap4(app)                 #使用Bootstrap4   

if __name__ == '__main__':
    app.run()

当我们使用工厂函数时,可以使用如下初始化扩展。

from flask_bootstrap import Bootstrap4
from flask import Flask

bootstrap = Bootstrap4()            #使用Bootstrap4

def create_app():
    app = Flask(__name__)
    bootstrap.init_app(app)         #初始化bootstrap
    return app

注意:因为flask-bootstrap不支持Bootstrap4,当我们安装的是flask-bootstrap时,需要把Bootstrap4改为Bootstrap。

创建父模板

首先我们在Flask项目中的templates文件夹中创建一个名为mybase.html父模板文件。创建父模板Flask-Bootstrap和Bootstrap-Flask的区别:

Flask-Bootstrap

Flask-Bootstrap包含内置的基本模板,所以我们的父模板需要继承bootstrap中的base.html模板才能渲染bootstrap中的组件,创建mybase.html父模板内容如下:

{# 继承bootstrap中的base.html #}
{% extends "bootstrap/base.html" %}
{# 块修改标题 #}
{% block title %}This is an example page{% endblock %}

{# 块导航栏 #}
{% block navbar %}
{% endblock %}

{# 块内容 #}
{% block content %}
{% endblock %}

在子模板中,我们编写的HTML文件内容都是父模板的基于块(block)的,例如:上面的title、navbar、content,除了这些,还有:

{# css块 #}
{% block styles %}
    {{super()}}
{% endblock %}

{# JavaScript块 #}
{% block scripts %}
    {{super()}}
{% endblock %}

这样我们就可以使用bootstrap中的插件快速生成页面。

注意:

  • Flask-Bootstrap不支持Bootstrap4,所以在使用Flask-Bootstrap只能使用Bootstrap3中文文档的组件;
  • 在子模板中使用这些块时,可以编写super()函数用来继承父模板的块。

Bootstrap-Flask

出于灵活性的原因,Bootstrap-Flask不包含内置的基本模板,所以不能使用bootstrap中的base.html模板,需要我们自己创建全新的父模板。

Bootstrap-Flask提供了两个辅助函数来加载模板中的Bootstrap资源:bootstrap.load_css()和bootstrap.load_js().

创建父模板示例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    {#  块标题  #}
    <title>{% block mytitle %}
        首页
    {% endblock %}</title>
    
    {#块样式,使用bootstrap.load_css()加载bootstrap的css资源#}
    {% block mystyle %}{{ bootstrap.load_css() }}{% endblock %}

</head>
<body>
{#块导航栏#}
{% block navbar %}
{% endblock %}

{#块内容#}
{% block concent %}
{% endblock %}

{#块JavaScript ,使用bootstrap.load_js()加载bootstrap的JavaScript资源#}
{% block scripts %}{{ bootstrap.load_js() }}{% endblock %}

{#块底部内容#}
{% block footer %}
{% endblock %}
</body>
</html>

这里我们为父模板mybase.html文件添加了标题、导航栏、内容、底部内容,并使用了bootstrap.load_css()和bootstrap.load_js()加载bootstrap的资源。

这样我们就可以使用bootstrap4中文文档中的组件了,这里我们选择了导航栏的组件,如下图所示:



我们把图中的代码复制在父模板mybase.html中的块导航栏,在上面的Flask程序中添加渲染mybase.html的视图函数,代码如下所示:

@app.route('/')
def index():
    return render_template('mybase.html')

启动Flask程序,访问http://127.0.0.1:5000/,如下图所示:

这样我们就成功快速地创建简洁美观的导航栏,大家可以根据需要添加bootstrap4里面的组件。

快速渲染宏

目前,Bootstrap-Flask一共提供了12个宏,分别用来快捷渲染各类Bootstrap页面组件,并提供了对扩展Flask-WTF、Flask-SQLAlchemy的支持。

模板路径 描述
render_field() bootstrap4/form.html 渲染一个 WTForms 表单域
render_form() bootstrap4/form.html 呈现一个 WTForms 表单
render_form_row() bootstrap4/form.html 渲染一行网格表格
render_hidden_errors() bootstrap4/form.html 为隐藏的表单字段呈现错误消息
render_pager() bootstrap4/pagination.html 渲染一个基本的 Flask-SQLAlchemy pagniantion
render_pagination() bootstrap4/pagination.html 呈现标准的 Flask-SQLAlchemy 分页
render_nav_item() bootstrap4/nav.html 渲染导航项
render_breadcrumb_item() bootstrap4/nav.html 渲染项目
render_static() bootstrap4/utils.html 呈现资源参考代码(即<link>, <script>
render_messages() bootstrap4/utils.html 渲染由 flash() 函数发送的闪烁消息
render_icon() bootstrap4/utils.html 渲染 Bootstrap 图标
render_table() bootstrap4/table.html 使用给定数据渲染表格

使用方法相当简单,以渲染Flask-WTF(WTForms)的表单类的render_form()宏为例,我们只需要从对应的模板路径导入宏,然后调用即可并传入必要的参数,示例代码如下所示:

{% from 'bootstrap4/form.html' import render_form %}

{{ render_form(form) }}

好了,关于Flask框架——Bootstrap-Flask使用就讲到这里了,感谢观看,下篇文章学习了Flask框架——MongoEngine使用MongoDB。

公众号:白巧克力LIN

该公众号发布Python、数据库、Linux、Flask、自动化测试、Git等相关文章

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容