Flask 框架集成Bootstrap

前面學習了 Flask 框架的基本用法,以及模板引擎 Jinja2,按理說可以開始自己的 Web 之旅了,不過在啟程之前,還有個重要的武器需要了解一下,就是著名的 Bootstrap 框架和 Flask 的結合,這將大大提高開發 Web 應用的效率。

簡介

Bootstrap 是 Twitter 公司的設計師 Mark Otto 和 Jacob Thornton 開發的 Web 項目開發框架,簡潔、直觀、強悍,使得 Web 開發更加快捷,一經推出后頗受歡迎,一直是 GitHub 上的熱門開源項目,這么好的開發框架 Flask 一定少不了。

期初在 Flask 的擴展包中有 flask-bootstrap, 不過后來更新很少,后來 greyli 基于 flask-bootstrap 開發了 bootstrap-flask 擴展模塊,不經支持最新的 Bootstrap4, 還基于 Jinjia2 模板引擎的宏,做了更多的擴展。值得一提的是 greyli 是個中國帥小伙,能在文章后面的參考鏈接中找到他。

安裝

使用 pip 安裝:

pip install bootstrap-flask

如果之前安裝過?flask-bootstrap, 需要將其卸載掉,不然兩者會有沖突,如果您遇到錯誤提示:?jinja2.exceptions.UndefinedError: 'bootstrap' is undefined,很大可能就是這個問題

小試牛刀

導入模塊

創建一個?flaskbootstrap.py?程序文件,引入模塊?flask_bootstrap, 您沒看錯,引入的并不是?bootstrap-flask

from flask_bootstrap import Bootstrap

注意:我在做示例時,將代碼文件名定義為?flask_bootstrap.py, 運行時提示 無法導入 Bootstrap 模塊,這是因為文件名與模塊?flask_bootstrap?沖突了

然后對 Flask 應用初始化:

app = Flask(__name__) # 創建一個 Flask 應用bootstrap = Bootstrap(app) # 為應用初始化 bootstrap

給應用加載 bootstrap 主要是給應用加上 Jinja2 的擴展,下面的工作就是寫模板文件。

創建基礎模板

bootstrap-flask?雖然基于?flask-bootstrap,但是卻沒有提供默認的模板文件,期望在后續版本中能有吧,不過自己寫也不麻煩,我們在文件夾 templates 中創建一個 base.html,內容是:

<!-- 引入導航模塊的宏 render_nav_item -->{% from 'bootstrap/nav.html' import render_nav_item %}<!-- 下面是正常的 Bootstrap 頁面代碼,看起來很復雜,不過可以從官網上拷貝 --><!DOCTYPE html><html lang="cn">    <head>        <meta charset="utf-8">        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">        <title>{% block title %} Flask Bootstrap {% endblock %}</title> <!-- 定義標題塊 -->        <link rel="icon" href="{{ url_for('static', filename='favicon.ico') }}">        {{ bootstrap.load_css() }}  <!-- 動態加載 Bootstrap 樣式 -->    </head>    <body>    <main class="container">        <nav class="navbar navbar-expand-lg navbar-dark bg-dark">            <div class="navbar-header">                <a class="navbar-brand" href="#">Python100</a>            </div>            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"                    aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">                <span class="navbar-toggler-icon"></span>            </button>            <div class="collapse navbar-collapse" id="navbarSupportedContent">                <ul class="navbar-nav mr-auto">                    <!-- 利用宏 render_nav_item 創建菜單 -->                    {{ render_nav_item('index', '首頁', use_li=True) }}                </ul>            </div>        </nav>        {% block content %}  <!-- 定義內容塊 -->        <h1> Hello Flask Bootstrap! </h1>        {% endblock %}        <footer class="text-center">            {% block footer %} <!-- 定義頁腳塊 -->                <small> ? 2019 <a href="http://justdopython.com" title="python 100天">Python 技術</a>                </small>            {% endblock %}        </footer>    </main>    <!-- 動態加載 Bootstrap js 腳本 -->    {{ bootstrap.load_js() }}    </body></html>

是不是感覺很頭大,不過是代碼多了些,結構很其實很簡單,大部分代碼是 Bootstrap 提供的基本框架代碼,然后加入了一些?bootstrap-flask?的擴展。我們來分析一下:

  • 首先引入導航元素宏?render_nav_item,因為在后面制作導航菜單時要用

  • 然后是大段的 Bootstrap 框架代碼

  • 定義塊,用來在繼承 base.html 的子模板中做替換,其中有 標題、內容和頁尾

  • 動態加載 Bootstrap 樣式和腳本,通過?bootstrap.load_css()?和?bootstrap.load_js()

  • 在導航菜單的位置,使用宏?render_nav_item?創建一個首頁菜單

這樣就完成基礎模板的定義,稍后會對?render_nav_itembootstrap.load_css()和?bootstrap.load_js()?做解釋。

創建頁面模板

有了基礎模板,就可以做具體的頁面模板了,先做首頁 index.html,代碼如下:

{% extends "base.html" %} <!-- 繼承基礎模板 -->
{% block content %} <!-- 替換頁面內容 --><h1> Hello Flask Bootstrap </h1>{% endblock %}

是不是簡潔多了?下面在?flaskbootstrap.py?中加上首頁的視圖函數:???????

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

啟動

如果一切順利,訪問?localhost:5000?就能看到如下效果:

圖片

首頁效果

調整瀏覽器頁面大小,可以看到頁面自適應效果,是不是很神奇。接下來詳細說明一下?bootstrap-flask?模塊

資源助手

在小試牛刀中,能看到對 Bootstrap 樣式和腳本引用的方法?bootstrap.load_css()和?bootstrap.load_js(),默認情況下會自動從 Bootstrap 的 CDN 上引用最新版的 Bootstrap 資源,例如:?https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css,這樣就方便了開發者對 Bootstrap 資源的引用和升級。

使用本地資源

如果想要從其他位置或者本地引用資源,只要在給應用初始化完 Bootstrap 之后,將應用的?BOOTSTRAP_SERVE_LOCAL?屬性設置為?True?就好了:???????

app = Flask(__name__) # 創建一個 Flask 應用bootstrap = Bootstrap(app) # 為應用初始化 bootstrapapp.config['BOOTSTRAP_SERVE_LOCAL'] = True  # 設置為使用本地資源

本地資源放在?static?目錄下(這個目錄是 Flask 框架默認的靜態資源目錄),Bootstrap 本地資源放置如下:

圖片

Bootstrap 資源

bootstrap.load_css()

加載 Bootstrap 樣式資源, 參數:

  • version,指定 Bootstrap 樣式版本號,默認值為 4.3.1,本地資源無效

bootstrap.load_js()

加載 Bootstrap 腳本資源

參數:

  • version,指定 Bootstrap 腳本版本號,默認為 4.3.1,本地資源無效

  • jquery_version,指定 JQuery 版本號,默認為 3.3.1,本地資源無效

  • popper_version,指定 Popper 版本號,默認為 1.14.0,本地資源無效

  • with_jquery,是否加載 JQuery, 默認為?True

  • with_popper,是否加載 Popper, 默認為?True

bootstrap-flask?主要的改進是加入了很多方法是用的宏,讓對頁面效果的編輯像寫邏輯代碼一樣,并在宏中還對所處環境信息進行了判斷,比如菜單是否要激活,分頁控件動態效果等等,下面介紹幾個典型的宏

render_nav_item()

生成一個導航菜單

參數:

  • endpoint,路徑點,可以直接寫視圖函數名

  • text,標題

代碼示例:

{% from 'bootstrap/nav.html' import render_nav_item %}<nav class="navbar navbar-expand-lg navbar-light bg-light">    <div class="navbar-nav mr-auto">        {{ render_nav_item('index', 'Home') }}        {{ render_nav_item('explore', 'Explore') }}        {{ render_nav_item('about', 'About') }}    </div></nav>

render_breadcrumb_item()

面包屑導航條 參數:

  • endpoint,路徑點,可以直接寫視圖函數名

  • text,標題

代碼示例:

{% from 'bootstrap/nav.html' import render_breadcrumb_item %}<nav aria-label="breadcrumb">    <ol class="breadcrumb">        {{ render_breadcrumb_item('home', 'Home') }}        {{ render_breadcrumb_item('users', 'Users') }}        {{ render_breadcrumb_item('posts', 'Posts') }}        {{ render_breadcrumb_item('comments', 'Comments') }}    </ol></nav>

render_static()

靜態資源引用,例如引用 css 、js 或者 圖標

參數:

  • type 資源類型,可以是 css 或 js 或 icon

  • filename_or_url 資源路徑,文件名 或者 參數?local?為?False?時的遠程 url

  • local 是否本地資源,默認為?True

代碼示例:

{% from 'bootstrap/utils.html' import render_static %}{{ render_static('css', 'style.css') }}

其他宏

還有有些宏很有用,例如 表單(form)相關的,還有分頁相關的,不過這些會涉及到其他 Flask 擴展模塊,我們會在介紹?表單?和?數據庫?的章節中做進一步學習,如果您有興趣,可以瀏覽參考鏈接中的內容。

總結

這篇文章簡單介紹了 Flask 框架中如何使用 Bootstrap 擴展,從一個簡單的示例開始,講解了基于 Jinja2 模板引擎的?bootstrap-flask?模塊的使用,其中包括資源助手?bootstrap.load_css()?和?bootstrap.load_css()?,以及一些基本的宏的用法,在參考代碼中有較為完整的例子,您可以作為參考。在后面的文章中將會陸續介紹?表單?和?數據庫?的使用,敬請期待。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35648.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35648.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35648.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

國產數據庫-內核特性-低基數全局字典

國產數據庫-內核特性-StarRocks低基數全局字典 StarRocks2.0引入了低基數全局字典&#xff0c;可以通過全局字典將字符串的相關操作轉換成整型相關操作&#xff0c;大大提升查詢性能。 1、低基數字典 對于利用整型替代字符串進行處理&#xff0c;通常使用字典編碼進行優化。Sta…

人大金倉助力某大型金融機構業務系統異地容災優化升級

日前&#xff0c;人大金倉助力某大型金融機構應收賬款融資服務平臺異地容災項目順利上線&#xff0c;保證了平臺系統運行的連續性和數據安全&#xff0c;為充分發揮平臺的融資功能&#xff0c;緩解中小微企業融資難提供了強有力的保障。 “ 緩解中小微企業融資難 某大型金融機構…

【MySQL--->數據庫操作】

文章目錄 [TOC](文章目錄) 一、操作語句1.增2.刪3.改4.查5.備份 二、字符集與校驗規則 一、操作語句 1.增 語句格式:create database [if no exists]數據庫名[create_specification [,create_specification] …]; 中括號內是可選項,if no exists是指如果數據庫不存在就創建,存…

STM32 F103C8T6學習筆記7:雙機無線串口通信

今日嘗試配通倆個C8T6單片機之間的無線串口通信&#xff0c;文章提供原理&#xff0c;源碼&#xff0c;測試效果圖&#xff0c;測試工程下載&#xff1a; 目錄 傳輸不規范問題&#xff1a; 串口通信資源&#xff1a; 單個串口資源理解&#xff1a; 單片機串口資源&#xf…

Redis的單線程與多線程

Redis的核心處理邏輯一直都是單線程 有一些分支模塊是多線程(某些異步流程從4.0開始用的多線程&#xff0c;例如UNLINK、FLUSHALL ASYNC、FLUSHDB ASYNC等非阻塞的刪除操作。網絡I/O解包從6.0開始用的是多線程;) 為什么是單線程 多線程多好啊可以利用多核優勢 官方給的解釋 …

UI自動化環境的搭建(python+pycharm+selenium+chrome)

最近在做一些UI自動化的項目&#xff0c;為此從環境搭建來從0到1&#xff0c;希望能夠幫助到你&#xff0c;同時也是自我的梳理。將按照如下進行開展&#xff1a; 1、python的下載、安裝&#xff0c;python環境變量的配置。 2、pycharm開發工具的下載安裝。 3、selenium的安裝。…

Leetcode34 在排序數組中查找元素的第一個和最后一個位置

給你一個按照非遞減順序排列的整數數組 nums&#xff0c;和一個目標值 target。請你找出給定目標值在數組中的開始位置和結束位置。 如果數組中不存在目標值 target&#xff0c;返回 [-1, -1]。 你必須設計并實現時間復雜度為 O(log n) 的算法解決此問題。 代碼&#xff1a; c…

如何使用 Go 獲取 URL 的參數,以及使用時的問題

Go 獲取 URL 參數也很容易&#xff0c;但是由于 Go 有嚴格的數據類型和錯誤管理&#xff0c;所以在使用時會些微有些復雜。所以本文不僅會講如何獲取 URL 的參數&#xff0c;也會講在使用時的一些問題。 首先假設 URL 是https://www.example.com/?keywordabc&id12。 其他…

java中函數式接口、Stream流、方法引用、junit單元測試、反射、注解

函數式接口&#xff1a; 在java中有且僅有一個抽象方法的接口稱為函數式接口&#xff0c;但是可以包含其它的默認的或靜態的方法。 格式&#xff1a; 修飾符 interface 接口名稱 {public abstract 返回值類型 方法名稱(可選參數);// 其他非抽象方法 }函數式接口&#xff1a;…

服務器安全維護注意事項有哪些?

服務器的安全關系著公司整個網絡以及所有數據的安全&#xff0c;我們該如何做好服務器后續的安全維護呢?河南億恩科技股份有限公司&#xff0c;專注服務器托管23年&#xff0c;不僅是國內專業的互聯網基礎應用服務提供商之一&#xff0c;還是國家工信部認定的綜合電信服務運營…

OpenJDK Maven 編譯出錯: package jdk.nashorn.internal.runtime.logging does not exist

前言 OpenJDK 1.8.0Maven 3.8.5TencentOS Server 3.1 錯誤信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project tour-common: Compilation failure: Compilation failure: [ERROR] /opt/tour-c…

JavaScript預編譯機制

變量預編譯 任何變量&#xff0c;如果未經聲明就賦值&#xff0c;此變量是屬于 window 的屬性&#xff0c;而且不會做變量提升&#xff0c;無論在哪個作用域內賦值。比如說直接寫 console.log(a)肯定會報錯&#xff0c;提示找不到 a。但如果直接寫 a 100就不會報錯&#xff0…

【Linux命令行與Shell腳本編程】第十九章 正則表達式

Linux命令行與Shell腳本編程 第十九章 正則表達式 文章目錄 Linux命令行與Shell腳本編程 第十九章 正則表達式九.正則表達式9.1.正則表達式基礎9.1.1.正則表達式的類型9.2.定義BRE模式9.2.1.普通文本9.2.2.特殊字符 9.2.3.錨點字符錨定行首^錨定行尾$組合錨點 9.2.4.點號字符\.…

funbox3靶場滲透筆記

funbox3靶場滲透筆記 靶機地址 https://download.vulnhub.com/funbox/Funbox3.ova 信息收集 fscan找主機ip192.168.177.199 .\fscan64.exe -h 192.168.177.0/24___ _/ _ \ ___ ___ _ __ __ _ ___| | __/ /_\/____/ __|/ __| __/ _ |/ …

SpringBoot復習(39)Servlet容器的自動配置原理

Servlet容器自動配置類為ServletWebServerFactoryAutoConfiguration 可以看到通過Import注解導入了三個配置類&#xff1a; 通過這個這三個配置類可以看出&#xff0c;它們都使用了ConditionalOnClass注解&#xff0c;當類路徑存在tomcat相關的類時&#xff0c;會配置一個T…

【數據結構?堆】序列和的前n小元素

題目描述 問題&#xff1a;序列和的前n小元素   給出兩個長度為n的有序表A和B, 在A和B中各任取一個, 可以得到 n^2 個和. 求這些和最小的n個。 輸入輸出格式 輸入格式&#xff1a; 輸入數據共三行。   第一行&#xff0c;一個整數值n &#xff08; n < 10^4 &#xff…

Linux系列:從0到1用Docker部署springboot項目

目錄 1.前提條件 2.編寫DockerFile鏡像文件 3.打包SpringBoot項目 4.通過軟件Xftp進行傳輸&#xff08;*&#xff09; 1.點擊“文件-新建”?編輯 5.操作遠程主機 1.docker構建 2.容器運行 6.容器的關閉和刪除 1.前提條件 Linux、docker、xftp的安裝、一臺可以訪問的遠…

教雅川學纏論07-中樞實戰眾泰汽車000980

本文實戰眾泰汽車 下面是2023年11月14-2023年8月8眾泰汽車日K圖 先畫日K 接下來處理包含&#xff0c;就變成下面這個樣子 下面在套上纏論的理論&#xff0c;未來股價的走勢應該是紅色橢圓形虛線里面的樣子 好了&#xff0c;文章就到這里&#xff0c;如果眾泰最終不是這個走勢…

linux 目錄操作命令

目錄操作命令 文件列表 ls命令文件列表 ls [選項] [參數]-------------------------------l 詳細信息-L 緊接著符號性連接&#xff0c;列出它們指向的文件-a 所有文件&#xff0c;包含隱藏文件(以點號起始的文件)-A 與-a相同&#xff0c;但是不會列出來. 和 ..-c 根據創建時間排…

IDEA部署配置Maven項目教程,IDEA配置Tomcat(2019.3.3)

一、前言 當涉及到軟件開發和項目管理時&#xff0c;使用一個可靠的構建工具是非常重要的。Maven是一個廣泛使用的構建工具&#xff0c;它為Java項目提供了一種簡化的構建過程和依賴管理。 在本文中&#xff0c;我們將探討如何部署Maven并開始使用它來構建您的項目。我們將介紹…