Flask 模板 之 變量和過濾器

1.模板

在前面的示例中,視圖函數的主要作用是生成請求的響應,這是最簡單的請求。實際上,視圖函數有兩個作用:處理業務邏輯和返回響應內容。在大型應用中,把業務邏輯和表現內容放在一起,會增加代碼的復雜度和維護成本。本節學到的模板,它的作用即是承擔視圖函數的另一個作用,即返回響應內容。 模板其實是一個包含響應文本的文件,其中用占位符(變量)表示動態部分,告訴模板引擎其具體值需要從使用的數據中獲取。使用真實值替換變量,再返回最終得到的字符串,這個過程稱為“渲染”。Flask使用Jinja2這個模板引擎來渲染模板。Jinja2能識別所有類型的變量,包括{}。 Jinja2模板引擎,Flask提供的render_template函數封裝了該模板引擎,render_template函數的第一個參數是模板的文件名,后面的參數都是鍵值對,表示模板中變量對應的真實值。

Jinja2官方文檔(http://docs.jinkan.org/docs/jinja2/)

我們先來認識下模板的基本語法:


{% if user %}{{ user }}
{% else %}hello!
<ul>{% for index in indexs %}<li> {{ index }} </li>{% endfor %}
</ul>

通過修改一下前面的示例,來學習下模板的簡單使用:

@app.route('/')
def hello_itcast():return render_template('index.html')@app.route('/user/<name>')
def hello_user(name):return render_template('index.html',name=name)

變量

在模板中{{ variable }}結構表示變量,是一種特殊的占位符,告訴模板引擎這個位置的值,從渲染模板時使用的數據中獲取;Jinja2除了能識別基本類型的變量,還能識別{};

<p>{{mydict['key']}}</p><p>{{mylist[1]}}</p><p>{{mylist[myvariable]}}</p>
from flask import Flask,render_template
app = Flask(__name__)@app.route('/')
def index():mydict = {'key':'silence is gold'}mylist = ['Speech', 'is','silver']myintvar = 0return render_template('vars.html',mydict=mydict,mylist=mylist,myintvar=myintvar)
if __name__ == '__main__':app.run(debug=True)

反向路由:

Flask提供了url_for()輔助函數,可以使用程序URL映射中保存的信息生成URL;url_for()接收視圖函數名作為參數,返回對應的URL;

如調用url_for('index',_external=True)返回的是絕對地址,在下面這個示例中是http://127.0.0.1:5000/index。

@app.route('/index')
def index():return render_template('index.html')@app.route('/user/')
def redirect():return url_for('index',_external=True)

自定義錯誤頁面:

from flask import Flask,render_template@app.errorhandler(404)
def page_not_found(e):return render_template('404.html'), 404

?

2 過濾器:

過濾器的本質就是函數。有時候我們不僅僅只是需要輸出變量的值,我們還需要修改變量的顯示,甚至格式化、運算等等,這就用到了過濾器。 過濾器的使用方式為:變量名 | 過濾器。 過濾器名寫在變量名后面,中間用 | 分隔。如:{{variable | capitalize}},這個過濾器的作用:把變量variable的值的首字母轉換為大寫,其他字母轉換為小寫。 其他常用過濾器如下:

字符串操作:

safe:禁用轉義;

  <p>{{ '<em>hello</em>' | safe }}</p>

capitalize:把變量值的首字母轉成大寫,其余字母轉小寫;

  <p>{{ 'hello' | capitalize }}</p>

lower:把值轉成小寫;

  <p>{{ 'HELLO' | lower }}</p>

upper:把值轉成大寫;

  <p>{{ 'hello' | upper }}</p>

title:把值中的每個單詞的首字母都轉成大寫;

  <p>{{ 'hello' | title }}</p>

trim:把值的首尾空格去掉;

  <p>{{ ' hello world ' | trim }}</p>

reverse:字符串反轉;

  <p>{{ 'olleh' | reverse }}</p>

format:格式化輸出;

  <p>{{ '%s is %d' | format('name',17) }}</p>

striptags:渲染之前把值中所有的HTML標簽都刪掉;

  <p>{{ '<em>hello</em>' | striptags }}</p>

列表操作

first:取第一個元素

  <p>{{ [1,2,3,4,5,6] | first }}</p>

last:取最后一個元素

  <p>{{ [1,2,3,4,5,6] | last }}</p>

length:獲取列表長度

  <p>{{ [1,2,3,4,5,6] | length }}</p>

sum:列表求和

  <p>{{ [1,2,3,4,5,6] | sum }}</p>

sort:列表排序

  <p>{{ [6,2,3,1,5,4] | sort }}</p>

語句塊過濾(不常用):

  {% filter upper %}this is a Flask Jinja2 introduction{% endfilter %}

自定義過濾器:

過濾器的本質是函數。當模板內置的過濾器不能滿足需求,可以自定義過濾器。自定義過濾器有兩種實現方式:一種是通過Flask應用對象的add_template_filter方法。還可以通過裝飾器來實現自定義過濾器。

自定義的過濾器名稱如果和內置的過濾器重名,會覆蓋內置的過濾器。

實現方式一:通過調用應用程序實例的add_template_filter方法實現自定義過濾器。該方法第一個參數是函數名,第二個參數是自定義的過濾器名稱。

def filter_double_sort(ls):return ls[::2]
app.add_template_filter(filter_double_sort,'double_2')

實現方式二:用裝飾器來實現自定義過濾器。裝飾器傳入的參數是自定義的過濾器名稱。

@app.template_filter('db3')
def filter_double_sort(ls):return ls[::-3]

?

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

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

相關文章

架設證書服務器 及 讓IIS啟用HTTPS服務

http://blog.csdn.net/dier4836/article/details/7719532轉載于:https://www.cnblogs.com/kunlunmountain/p/6428838.html

淺談互聯網寒冬與經濟形勢

文章目錄前言&#xff1a;閑扯總結&#xff1a;前言&#xff1a; 作為剛進入職場一年多的小白來說&#xff0c;剛準備“猥瑣發育漲經驗”&#xff0c;卻碰到這股互聯網寒冬&#xff0c;也感到鴨梨山大。也許有人認為我在販賣焦慮&#xff0c;但是現實真的很嚴峻。接下說下過去…

jenkins 配置

build periodically 周期進行項目構建poll scm 定時檢查遠嗎變更&#xff0c;如果有更新就checkout最新code下來&#xff0c;然后執行構建動作日程表&#xff1a;H 9 *** : 每天9點固定構建一次H/30 8-17 *** : 每天的8-17點每隔三十分鐘檢查一次轉載于:https://…

Java集合---LinkedList源碼解析

一、源碼解析1、 LinkedList類定義2、LinkedList數據結構原理3、私有屬性4、構造方法5、元素添加add()及原理6、刪除數據remove()7、數據獲取get()8、數據復制clone()與toArray()9、遍歷數據&#xff1a;Iterator()二、ListItr 一、源碼解析 1、 LinkedList類定義。 public cla…

Mysql面試熱身題集總結

文章目錄前言1、熱身題實踐其他前言 一直有個想法&#xff1a;把面試需要的知識點全都總結一下&#xff0c;包括數據庫&#xff0c;語言&#xff0c;算法&#xff0c;數據結構等知識&#xff0c;形成一個面試總結筆記&#xff0c;這樣以后面試的時候只看這些文章回顧下就行了。…

Flask中的 url_for() 函數

最近在學Python Flask框架&#xff0c;并且學會做一些簡單的項目&#xff0c;如做一個網站的登錄頁面等&#xff0c;其中學到了一個路由反向解析的函數 url_for&#xff08;&#xff09;&#xff0c;這里做一個小結&#xff0c;供日后復習。 1.URL反轉&#xff1a;根據視圖函數…

Oracle執行計劃解釋

為什么80%的碼農都做不了架構師&#xff1f;>>> 一&#xff0e;相關的概念 Rowid的概念&#xff1a;rowid是一個偽列&#xff0c;既然是偽列&#xff0c;那么這個列就不是用戶定義&#xff0c;而是系統自己給加上的。 對每個表都有一個rowid的偽列&#xff0c;但是表…

鄧迎春繪畫201702作品10

轉載于:https://www.cnblogs.com/hanxiangmin/p/6439376.html

解決:FLASK中Warning: (1366, Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...'

Flask項目中使用mysql數據庫啟動項目是發出警告&#xff1a; Warning: (1366, “Incorrect string value: ‘\xD6\xD0\xB9\xFA\xB1\xEA…’ for column ‘VARIABLE_VALUE’ at row 479/480/481”) 但是項目可以正常啟動使用 如果想將次警告去掉需要導入一個模塊 解決方法&…

Pandas常用操作總結

文章目錄前言1、DF常用的兩種創建方式方式一&#xff1a;通過np來生成方式二&#xff1a;通過字典來生成2、pandas常用的屬性及方法3、Pandas Select(數據選擇)4、Pandas Set_values設置值5、Pandas Nan處理缺失值方法一&#xff1a;剔除缺失值所在的行或列方法二&#xff1a;填…

jmeter跨線程組傳值

在測試過程中&#xff0c;有時候需要jmeter跨線程組傳值&#xff0c;jmeter本身又不具備此功能&#xff0c;那么&#xff0c;又該如何實現呢&#xff1f; 其實&#xff0c;我們可以通過BeanShell去實現。 實現過程如下&#xff1a; 1.線程組A中&#xff0c;使用正則表達式提取器…

BZOJ 3093: [Fdu校賽2012] A Famous Game

3093: [Fdu校賽2012] A Famous Game Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 248 Solved: 133[Submit][Status][Discuss]Description Mr. B and Mr. M like to play with balls. They have many balls colored in blue and red. Firstly, Mr. B randomly picks up N …

Python第三方庫的安裝及路徑查看總結

文章目錄1、python第三方庫的四種安裝方法2、更換安裝的第三方庫的鏡像源3、如何查看查看python安裝路徑以及pip安裝的包列表及路徑3.1、Linux環境下查看Python路徑3.2、查看使用pip安裝的軟件包3.3、Windows 環境 查看Python路徑實際工作中&#xff0c;經常會在公司的服務器中…

解決 Cannot open D:\Program Files\Anaconda3\Scripts\pip-script.py 問題

報錯&#xff1a; Collecting pip Using cached https://files.pythonhosted.org/packages/30/db/9e38760b32e3e7f40cce46dd5fb107b8c73840df38f0046d8e6 514e675a1/pip-19.2.3-py2.py3-none-any.whl Installing collected packages: pip Found existing installation: pi…

解決:flask-sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406數據庫字段超出長度錯誤)

這個問題是說數據庫user的password字段長度超出&#xff0c;修改長度后&#xff0c; 硬核方法刪除migrations 文件夾 然后刪除數據庫中模型表格 python manage.py db init python manage.py db migrate python manage.py dbupgrate 三連擊后&#xff0c;在重新運行后方能生…

Android應用程序結構解析

界面布局文件 <?xml version"1.0" encoding"utf-8"?> 聲明了XML的版本號和編碼方式 <RelativeLayout>:聲明本界面采用的布局為RelativeLayout相對布局&#xff0c;該標簽下定義了諸如 layout_width/layout_height和paddingLeft相對布局等…

淺談開發中的MVVM模式及與MVP和MVC的區別

2019獨角獸企業重金招聘Python工程師標準>>> 我記得前段時間分享了一篇文章《 淺談Andorid開發中的MVP模式》&#xff08;點擊可跳轉&#xff09;&#xff0c;反響不錯&#xff0c;為了進一步介紹MVVM模式&#xff0c;還提前分享了實現Android中MVVM模式的一個關鍵技…

Azkaban簡介及安裝教程

前言&#xff1a; 最近在實際工作中玩到了Azkaban&#xff0c;雖然之前有簡單的接觸&#xff0c;但是真正用到的時候&#xff0c;才能體會到這個工具的實用性有多強。下面就寫個系列文章來記錄下azkaban從簡介及安裝配置再到簡單使用的一個過程。 1、概述 1.1、為什么需要工…

面向對象:實例化的對象調用類方法 db.Column()

請問 類的對象調用另一個類的對象 是什么意思&#xff1f;&#xff1f;&#xff1f; from flask_sqlalchemy import SQLAlchemydb SQLAlchemy()class User(db.Model):__tablename__ usersid db.Column(db.Integer, primary_keyTrue)username db.Column(db.String…

WatiN-Html元素的操作

自動化測試&#xff0c;何為自動化測試&#xff0c;簡單點說就是機器代替人工操作&#xff0c;那么WatiN實現Web應用在瀏覽器上的自動化就需要模擬人工點擊、輸入、選擇、拖放等等操作&#xff0c;在這些操作中會觸Html元素的onclick、onchange、onmousemove等事件。在WatiN中提…