Flask模板02

3.4 控制語句

常用的幾種控制語句:

模板中的if控制語句

@app.route('/user')
def user():user = 'dongGe'return render_template('user.html',user=user)
<html><head>{% if user %}<title> hello {{user}} </title>{% else %}<title> welcome to flask </title>        {% endif %}</head><body><h1>hello world</h1></body></html>

模板中的for循環語句

 @app.route('/loop')def loop():fruit = ['apple','orange','pear','grape']return render_template('loop.html',fruit=fruit)
 <html><head>{% if user %}<title> hello {{user}} </title>{% else %}<title> welcome to flask </title>        {% endif %}</head><body><h1>hello world</h1><ul>{% for index in fruit %}<li>{{ index }}</li>{% endfor %}</ul></body></html>

?

3.5 宏、繼承、包含

類似于python中的函數,宏的作用就是在模板中重復利用代碼,避免代碼冗余。

Jinja2支持宏,還可以導入宏,需要在多處重復使用的模板代碼片段可以寫入單獨的文件,再包含在所有模板中,以避免重復。

定義宏


{% macro input() %}<input type="text"name="username"value=""size="30"/>
{% endmacro %}

調用宏

{{ input() }}

定義帶參數的宏


{% macro input(name,value='',type='text',size=20) %}<input type="{{ type }}"name="{{ name }}"value="{{ value }}"size="{{ size }}"/>
{% endmacro %}

調用宏,并傳遞參數

{{ input(value='name',type='password',size=40)}}

把宏單獨抽取出來,封裝成html文件,其它模板中導入使用

文件名可以自定義macro.html

{% macro function() %}<input type="text" name="username" placeholde="Username"><input type="password" name="password" placeholde="Password"><input type="submit">
{% endmacro %}

在其它模板文件中先導入,再調用

{% import 'macro.html' as func %}
{% func.function() %}

模板繼承:

模板繼承是為了重用模板中的公共內容。一般Web開發中,繼承主要使用在網站的頂部菜單、底部。這些內容可以定義在父模板中,子模板直接繼承,而不需要重復書寫。

{% block top %}``{% endblock %}標簽定義的內容,相當于在父模板中挖個坑,當子模板繼承父模板時,可以進行填充。

子模板使用extends指令聲明這個模板繼承自哪?父模板中定義的塊在子模板中被重新定義,在子模板中調用父模板的內容可以使用super()。

父模板:base.html

  {% block top %}頂部菜單{% endblock top %}{% block content %}{% endblock content %}{% block bottom %}底部{% endblock bottom %}

子模板:

  {% extends 'base.html' %}{% block content %}需要填充的內容{% endblock content %}
  • 模板繼承使用時注意點:
    • 不支持多繼承。
    • 為了便于閱讀,在子模板中使用extends時,盡量寫在模板的第一行。
    • 不能在一個模板文件中定義多個相同名字的block標簽。
    • 當在頁面中使用多個block標簽時,建議給結束標簽起個名字,當多個block嵌套時,閱讀性更好。

包含(Include)

Jinja2模板中,除了宏和繼承,還支持一種代碼重用的功能,叫包含(Include)。它的功能是將另一個模板整個加載到當前模板中,并直接渲染。

示例:

include的使用

{\% include 'hello.html' %}

包含在使用時,如果包含的模板文件不存在時,程序會拋出TemplateNotFound異常,可以加上ignore missing關鍵字。如果包含的模板文件不存在,會忽略這條include語句。

示例:

include的使用加上關鍵字ignore missing

{\% include 'hello.html' ignore missing %}

  • 宏、繼承、包含:
    • 宏(Macro)、繼承(Block)、包含(include)均能實現代碼的復用。
    • 繼承(Block)的本質是代碼替換,一般用來實現多個頁面中重復不變的區域。
    • 宏(Macro)的功能類似函數,可以傳入參數,需要定義、調用。
    • 包含(include)是直接將目標模板文件整個渲染出來。

3.6 Flask中的特殊變量和方法:

在Flask中,有一些特殊的變量和方法是可以在模板文件中直接訪問的。

config 對象:


config 對象就是Flask的config對象,也就是 app.config 對象。{{ config.SQLALCHEMY_DATABASE_URI }}

request 對象:

就是 Flask 中表示當前請求的 request 對象,request對象中保存了一次HTTP請求的一切信息。

request常用的屬性如下:

屬性說明類型
data記錄請求的數據,并轉換為字符串*
form記錄請求中的表單數據MultiDict
args記錄請求中的查詢參數MultiDict
cookies記錄請求中的cookie信息Dict
headers記錄請求中的報文頭EnvironHeaders
method記錄請求使用的HTTP方法GET/POST
url記錄請求的URL地址string
files記錄請求上傳的文件*

{{ request.url }}

url_for 方法:

url_for() 會返回傳入的路由函數對應的URL,所謂路由函數就是被 app.route() 路由裝飾器裝飾的函數。如果我們定義的路由函數是帶有參數的,則可以將這些參數作為命名參數傳入。

{{ url_for('index') }}{{ url_for('post', post_id=1024) }}

get_flashed_messages方法:

返回之前在Flask中通過 flash() 傳入的信息列表。把字符串對象表示的消息加入到一個消息隊列中,然后通過調用 get_flashed_messages() 方法取出。


{% for message in get_flashed_messages() %}{{ message }}
{% endfor %}

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

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

相關文章

Storm任務提交過程及目錄樹介紹

目錄前言&#xff1a;1、Storm 任務提交的過程2、Storm相關的目錄樹總結&#xff1a; 目錄 前言&#xff1a; 對于任何一個組件來說&#xff0c;了解它相關的任務提交的過程是非常有必要的&#xff08;畢竟生產中遇到一些Bug時&#xff0c;你如果知道內部執行的過程&#xf…

《Adobe InDesign CS6中文版經典教程》—第1課1.5節修改文檔的縮放比例

本節書摘來自異步社區《Adobe InDesign CS6中文版經典教程》一書中的第1課1.5節修改文檔的縮放比例&#xff0c;作者【美】Adobe公司,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.5 修改文檔的縮放比例Adobe InDesign CS6中文版經典教程InDesign中的控件讓用戶能…

隨機生成一定范圍的隨機數

function randomNum(min,max) { return Math.ceil(Math.random()*(max-min)min); } min,max最小最大范圍數字。轉載于:https://www.cnblogs.com/kingzlz/p/6229586.html

【python】Flask視圖

2.1 從 Hello World 開始 Flask程序運行過程&#xff1a; 所有Flask程序必須有一個程序實例。 Flask調用視圖函數后&#xff0c;會將視圖函數的返回值作為響應的內容&#xff0c;返回給客戶端。一般情況下&#xff0c;響應內容主要是字符串和狀態碼。 當客戶端想要獲取資源…

大數據之Kafka入門簡介

目錄前言&#xff1a;1、Kafka是什么2、JMS是什么3、Kafka核心組件&#xff08;重點&#xff09;總結&#xff1a; 目錄 前言&#xff1a; 作為流式計算中的一個組件&#xff0c;對于它的組成以及運行的原理&#xff0c;學習者也需要相關的了解。以下主要簡單介紹了kafka是什…

oracle的安裝與plsql的環境配置

1&#xff0c;首先得有oracle的安裝包和plsql的安裝包&#xff0c;安裝包地址可見百度云 http://pan.baidu.com/s/1miTqhmg 2.解壓下來進入0817賬套&#xff0c;找到set.exe文件&#xff0c;雙擊安裝即可 注意的是安裝的時候有兩個目錄是要自己創建的&#xff0c;否則安裝不成功…

如何在Docker容器中運行GUI程序

如何在Docker容器中運行GUI程序 各位&#xff0c;今天我們將學習如何在Docker之中運行GUI程序。我們可以輕易地在Docker容器中運行大多數GUI程序且不出錯。Docker是一個開源項目&#xff0c;提供了一個打包、分發和運行任意程序的輕量級容器的開放平臺。它沒有語言支持、框架或…

【python】Get與Post的區別?(面試官最想聽到的答案)

GET和POST是HTTP請求的兩種基本方法&#xff0c;要說它們的區別&#xff0c;接觸過WEB開發的人都能說出一二。 最直觀的區別就是GET把參數包含在URL中&#xff0c;POST通過request body傳遞參數。 你可能自己寫過無數個GET和POST請求&#xff0c;或者已經看過很多權威網站總結出…

大數據之Kafka集群安裝及簡單使用

目錄1、Kafka集群部署2、Kafka常用操作命令 目錄 1、Kafka集群部署 1.1、下載安裝包 http://kafka.apache.org/downloads.html 在linux中使用wget命令下載安裝包 wget http://mirrors.hust.edu.cn/apache/kafka/0.8.2.2/kafka_2.11-0.8.2.2.tgz 1.2、解壓安裝包 tar -z…

Python爬蟲入門之Urllib庫的基本使用

那么接下來&#xff0c;小伙伴們就一起和我真正邁向我們的爬蟲之路吧。 1.分分鐘扒一個網頁下來 怎樣扒網頁呢&#xff1f;其實就是根據URL來獲取它的網頁信息&#xff0c;雖然我們在瀏覽器中看到的是一幅幅優美的畫面&#xff0c;但是其實是由瀏覽器解釋才呈現出來的&#xf…

【python】hashlib.shasha256練習注冊 --筆記

用戶注冊和登錄import csv import hashlib#注冊將用戶信息填寫到csv文件中 def register():username input(用戶名:)password input(密碼:)user []user.append(username)user.append(hashlib.sha256(password.encode(utf-8)).hexdigest())with open(t2/users.csv, a, newlin…

《3ds Max瘋狂設計學院》——1.6節3ds Max 2016新增的主要功能

本節書摘來自異步社區《3ds Max瘋狂設計學院》一書中的第1章&#xff0c;第1.6節3ds Max 2016新增的主要功能&#xff0c;作者 曹茂鵬&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 1.6 3ds Max 2016新增的主要功能1&#xff0e;Max Creation Graph3ds Max…

大數據之Kafka內部原理詳細介紹

目錄前言&#xff1a;1、Kafka整體結構2、Consumer與topic關系3、Kafka消息的分發4、Consumer的負載均衡5、kafka文件存儲機制總結&#xff1a; 目錄 前言&#xff1a; 本篇文章所介紹的內容還是以了解為主&#xff0c;主要目的還是為了對Kafka有一個更深入的理解。主要介紹…

【python】urllib和urllib3,requests 簡要概括---筆記

urllib和urllib3&#xff0c;requestsurl:協議://存放資源的地址&#xff08;域名&#xff09;/具體的資源https://bj.lianjia.com/zufang/dghfjhsjdf648.htmlurllib.request 用來發出請求urllib.parseurllib.request.urlopen(str) --->response對象request urllib.reques…

JS與APP原生控件交互

“熱更新”、“熱部署”相信對于混合式開發的童鞋一定不陌生&#xff0c;那么APP怎么避免每次升級都要在APP應用商店發布呢&#xff1f;這里就用到了混合式開發的概念&#xff0c;對于電商網站尤其顯得重要&#xff0c;不可能每次發布一個活動&#xff0c;都要發布一個現版本&a…

《脫穎而出——成功網店經營之道》一2.6 連橫:返利模式的應用及分銷

本節書摘來異步社區《脫穎而出——成功網店經營之道》一書中的第2章&#xff0c;第2.6節&#xff0c;作者&#xff1a; 何小健 責編&#xff1a; 趙軒, 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.6 連橫&#xff1a;返利模式的應用及分銷 脫穎而出——成功網店…

【python】os模塊 遞歸刪除文件夾所有文件 --筆記

os.environ 獲取系統的環境變量 os.name nt -- windows \r\n | posix --- Linux \nos.path: import osprint(os.environ) print(os.environ[OS])print(os.path.abspath(t1/file01.py)) # 獲取絕對路徑 print(os.path.isabs(t1/file01.py)) # 判斷所給的路徑是否是一個絕對…

大數據之Spark集群安裝及簡單使用

目錄1、Spark集群安裝1.1. 安裝 2、啟動Spark Shell2.1、啟動spark shell2.2、在spark shell中編寫WordCount程序 目錄 1、Spark集群安裝 1.1. 安裝 1.1.1. 機器部署 準備兩臺以上Linux服務器&#xff0c;安裝好JDK1.7 1.1.2. 下載Spark安裝包 下載地址&#xff1a;ht…

《C和C++代碼精粹》——1.7 類型安全I/O

本節書摘來自異步社區出版社《C和C代碼精粹》一書中的第1章第1.7節&#xff0c;作者&#xff1a; 【美】Chuck Allison&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.7 類型安全I/O C和C代碼精粹當然每個C程序員都曾經使用過printf的錯誤格式描述符號。…

大數據之Spark簡介及RDD說明

目錄前言&#xff1a;1、Spark概述1.1、什么是Spark&#xff08;官網&#xff1a;http://spark.apache.org&#xff09;1.2、為什么要學Spark1.3、Spark特點 2、RDD概述2.1、什么是RDD2.2、RDD的屬性2.3、創建RDD的兩種方式2.4、RDD編程API2.5、RDD的依賴關系2.6、RDD的緩存2.7…