• 3.2、使用Flask-Bootstrap集成Twitter Bootstrap


    Bootstrap(http://getbootstrap.com/)是 Twitter 开发的一个开源框架,它提供的用户界面组件可用于创建整洁且具有吸引力的网页,而且这些网页还能兼容所有现代 Web 浏览器。

    Bootstrap 是客户端框架,因此不会直接涉及服务器。服务器需要做的只是提供引用了Bootstrap 层 叠 样 式 表(CSS) 和 JavaScript 文 件 的 HTML 响 应, 并 在 HTML、CSS 和JavaScript 代码中实例化所需组件。这些操作最理想的执行场所就是模板。

    要想在程序中集成 Bootstrap,显然要对模板做所有必要的改动。不过,更简单的方法是使用一个名为 Flask-Bootstrap 的 Flask 扩展,简化集成的过程。Flask-Bootstrap 使用 pip 安装:

    (venv)[user@localhost test]$ pip install flask-bootstrap

    Flask 扩展一般都在创建程序实例时初始化。示例 3-4 是 Flask-Bootstrap 的初始化方法。

    示例 3-4 hello.py:初始化 Flask-Bootstrap

    from flask_bootstrap import Bootstrap

    # ...

    bootstrap = Bootstrap(app)

    和第 2 章中的 Flask-Script 一样,Flask-Bootstrap 也从 flask_ 命名空间中导入,然后把程序实例传入构造方法进行初始化。初始化 Flask-Bootstrap 之后,就可以在程序中使用一个包含所有 Bootstrap 文件的基模板。这个模板利用 Jinja2 的模板继承机制,让程序扩展一个具有基本页面结构的基模板,其中就有用来引入 Bootstrap 的元素。示例 3-5 是把 user.html 改写为衍生模板后的新版本。

    示例 3-5 templates/user.html:使用 Flask-Bootstrap 的模板

    {% 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 %}

    Jinja2 中的 extends 指令从 Flask-Bootstrap 中导入 bootstrap/base.html,从而实现模板继承。Flask-Bootstrap 中的基模板提供了一个网页框架,引入了 Bootstrap 中的所有 CSS 和JavaScript 文件。基模板中定义了可在衍生模板中重定义的块。block 和 endblock 指令定义的块中的内容可添加到基模板中。

    上面这个 user.html 模板定义了 3 个块,分别名为 title、navbar 和 content。这些块都是基模板提供的,可在衍生模板中重新定义。title 块的作用很明显,其中的内容会出现在渲染后的 HTML 文档头部,放在 <title> 标签中。navbar 和 content 这两个块分别表示页面中的导航条和主体内容。

    在这个模板中,navbar 块使用 Bootstrap 组件定义了一个简单的导航条。content 块中有个<div> 容器,其中包含一个页面头部。之前版本的模板中的欢迎信息,现在就放在这个页面头部。改动之后的程序如下图所示。

     

    Flask-Bootstrap 的 base.html 模板还定义了很多其他块,都可在衍生模板中使用。表 3-2 列出了所有可用的块。

     表 3-2 中的很多块都是 Flask-Bootstrap 自用的,如果直接重定义可能会导致一些问题。例如,Bootstrap 所需的文件在 styles 和 scripts 块中声明。如果程序需要向已经有内容的块中添加新内容,必须使用 Jinja2 提供的 super() 函数。例如,如果要在衍生模板中添加新的 JavaScript 文件,需要这么定义 scripts 块:

    {% block scripts %}

    {{ super() }}

    <script type="text/javascript" src="my-script.js"></script>

    {% endblock %}

  • 相关阅读:
    Flutter -- iOS导航栏TabBar
    微信小程序布局
    Tomcat for Mac 搭建本地后台服务器 -- 探索Apache Tomcat
    masnory 动态高度
    iPhone 尺度 x xs sr xsmax
    Deepin 安装 tomcat
    Deepin 设置静态 ip
    md 文件 转 pdf
    mac 上关于截图的偏好设置
    MySQL笔记---DDL
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/6649506.html
Copyright © 2020-2023  润新知