在前面的示例中,檢視函式的主要作用是生成請求的響應,這是最簡單的請求。實際上,檢視函式有兩個作用:處理業務邏輯和返回響應內容。在大型應用中,把業務邏輯和表現內容放在一起,會增加**的複雜度和維護成本。本節學到的模板,它的作用即是承擔檢視函式的另乙個作用,即返回響應內容。 模板其實是乙個包含響應文字的檔案,其中用佔位符(變數)表示動態部分,告訴模板引擎其具體值需要從使用的資料中獲取。使用真實值替換變數,再返回最終得到的字串,這個過程稱為「渲染」。flask使用jinja2這個模板引擎來渲染模板。jinja2能識別所有型別的變數,包括{}。jinja2模板引擎,flask提供的render_template函式封裝了該模板引擎,render_template函式的第乙個引數是模板的檔名,後面的引數都是鍵值對,表示模板中變數對應的真實值。
jinja2官方文件(
我們先來認識下模板的基本語法:
}hello!
通過修改一下前面的示例,來學習下模板的簡單使用:
def hello_itcast():
return render_template('index.html')
def hello_user(name):
return render_template('index.html',name=name)
在模板中}結構表示變數,是一種特殊的佔位符,告訴模板引擎這個位置的值,從渲染模板時使用的資料中獲取;jinja2除了能識別基本型別的變數,還能識別{};
}}}
from flask import flask,render_template
def index():
mydict =
mylist = ['speech', 'is','silver']
myintvar = 0
return render_template('vars.html',
mydict=mydict,
mylist=mylist,
myintvar=myintvar
)if __name__ == '__main__':
flask提供了url_for()輔助函式,可以使用程式url對映中儲存的資訊生成url;url_for()接收檢視函式名作為引數,返回對應的url;
如呼叫url_for('index',_external=true)返回的是絕對位址,在下面這個示例中是
def index():
return render_template('index.html')
def redirect():
return url_for('index',_external=true)
from flask import flask,render_template
def page_not_found(e):
return render_template('404.html'), 404
過濾器的本質就是函式。有時候我們不僅僅只是需要輸出變數的值,我們還需要修改變數的顯示,甚至格式化、運算等等,這就用到了過濾器。 過濾器的使用方式為:變數名 | 過濾器。 過濾器名寫在變數名後面,中間用 | 分隔。如:},這個過濾器的作用:把變數variable的值的首字母轉換為大寫,其他字母轉換為小寫。 其他常用過濾器如下:
safe:禁用轉義;
}
capitalize:把變數值的首字母轉成大寫,其餘字母轉小寫;
}
lower:把值轉成小寫;
}
upper:把值轉成大寫;
}
title:把值中的每個單詞的首字母都轉成大寫;
}
trim:把值的首尾空格去掉;
}
reverse:字串反轉;
}
format:格式化輸出;
}
striptags:渲染之前把值中所有的html標籤都刪掉;
}
first:取第乙個元素
}
last:取最後乙個元素
}
length:獲取列表長度
}
sum:列表求和
}
sort:列表排序
}
this is a flask jinja2 introduction
過濾器的本質是函式。當模板內建的過濾器不能滿足需求,可以自定義過濾器。自定義過濾器有兩種實現方式:一種是通過flask應用物件的add_template_filter方法。還可以通過裝飾器來實現自定義過濾器。
自定義的過濾器名稱如果和內建的過濾器重名,會覆蓋內建的過濾器。
實現方式一:通過呼叫應用程式例項的add_template_filter方法實現自定義過濾器。該方法第乙個引數是函式名,第二個引數是自定義的過濾器名稱。
def filter_double_sort(ls):
return ls[::2]
實現方式二:用裝飾器來實現自定義過濾器。裝飾器傳入的引數是自定義的過濾器名稱。
def filter_double_sort(ls):
return ls[::-3]
模板變數及模板過濾器
模板標籤 常用的標籤 模板標籤的例子 以if for為例 模板的繼承與應用 django的強大在於模板的繼承。模板繼承可以讓你建立乙個基本的 股架 模板,它包含站點中全部的元素,並且可以定義能夠被子模版覆蓋的block。模板的繼承的例子 base.html 這個作為模板繼承頁 index.html在...
模板過濾器
lower 將值中所有的字元全部轉換成小寫。示例 如下 如果 value 是等於 hello world 那麼以上 將輸出 hello world upper 類似於 lower 只不過是將指定的字串全部轉換成大寫。truncatechars 如果給定的字串長度超過了過濾器指定的長度。那麼就會進行切...
模板變數,常用過濾器
靜態頁面 靜態網頁一經製成,內容就不會再變化,不管何人何時訪問,顯示的內容都是一樣的。如果要修改網頁的內容,就必須修改其源 然後重新上傳到伺服器上。動態頁面 指在網頁檔案中除了html標記以外,還包括一些實現特定功能的程式 這些程式 使得瀏覽器與伺服器之間可以進行互動,即伺服器端可以根據客戶端的不同...