Bootstrap是 Twitter 開發(fā)的一個開源框架,它提供的用戶界面組件可用于創(chuàng)建整潔且具有吸引力的網(wǎng)頁,而且這些網(wǎng)頁還能兼容所有現(xiàn)代 Web 瀏覽器。
安裝
要想在程序中集成 Bootstrap, 顯然要對模板做所有必要的改動。不過,更簡單的方法是使用一個名為 Flask-Bootstrap 的 Flask 擴(kuò) 展,簡化集成的過程。 Flask-Bootstrap 使用 pip安裝:
pip install flask-bootstrap
在之后的Python程序中使用bootstrap的時候,也需要導(dǎo)入和初始化,使用如下的代碼:
from flask.ext.bootstrap import Bootstrap
bootstrap = Bootstrap(app)
Flask-Bootstrap 需要從 flask.ext 命名空間中導(dǎo)入,然后把程序?qū)嵗齻魅霕?gòu)造方法進(jìn)行初始化。
初始化 Flask-Bootstrap 之后,就可以在程序中使用一個包含所有 Bootstrap 文件的基模板。這個模板利用 Jinja2 的模板繼承機(jī)制,讓程序擴(kuò)展一個具有基本頁面結(jié)構(gòu)的基模板,其中就有用來引入 Bootstrap 的元素。舉個栗子改寫上一節(jié)中的user.html。
{% extends "bootstrap/base.html" %}
{% block title %}Flasky{% endblock %}
{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle"data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">Flasky</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
</ul>
</div>
</div>
</div>
{% endblock %}
{% block content %}
<div class="container">
<div class="page-header">
<h1>Hello, {{ name }}!</h1>
</div>
</div>
{% endblock %}
首先使用extends命令引入bootstrap中的基模板---bootstrap/base.html,Bootstrap 中 的基模板提供了一個網(wǎng)頁框架,引入了 Bootstrap 中的所有 CSS 和模板 | 25JavaScript 文件?;0逯卸x了可在衍生模板中重定義的塊。 block 和 endblock 指令定義的塊中的內(nèi)容可添加到基模板中。
上面的栗子中,定義了title, navbar,content三個塊,這些塊都是基模板提供的, 可在衍生模板中重新定義。 title 塊的作用很明顯,其中的內(nèi)容會出現(xiàn)在渲染后的 HTML 文檔頭部,放在 <title> 標(biāo)簽中。 navbar 和 content 這兩個塊分別表示頁面中的導(dǎo)航條和主體內(nèi)容。
Flask-Bootstrap 的 base.html 模板還定義了很多其他塊,都可在衍生模板中使用,如下:


很多塊都是 Flask-Bootstrap 自用的,如果直接重定義可能會導(dǎo)致一些問題。例如, Bootstrap 所需的文件在 styles 和 scripts 塊中聲明。如果程序需要向已經(jīng)有內(nèi)容的塊中添加新內(nèi)容, 必須使用 Jinja2 提供的 super() 函數(shù)。例如,如果要在衍生模板中添加新的 JavaScript 文件,需要這么定義 scripts 塊:
{% block scripts %}
{{ super() }}
<script type = "text/javascript" src = "my-script.js"></script>
{% endblock %}