### Flask渲染Jinja2模板和傳參:
1. 如何渲染模板:
????* 模板放在`templates`文件夾下
????* 從`flask`中導(dǎo)入`render_template`函數(shù)丑婿。
????* 在視圖函數(shù)中,使用`render_template`函數(shù)挺智,渲染模板较幌。注意:只需要填寫模板的名字件相,不需要填寫`templates`這個文件夾的路徑。
2. 模板傳參:
????* 如果只有一個或者少量參數(shù)脏款,直接在`render_template`函數(shù)中添加關(guān)鍵字參數(shù)就可以了何暮。
????* 如果有多個參數(shù)的時候,那么可以先把所有的參數(shù)放在字典中婆赠,然后在`render_template`中绵脯,
????使用兩個星號,把字典轉(zhuǎn)換成關(guān)鍵參數(shù)傳遞進(jìn)去休里,這樣的代碼更方便管理和使用蛆挫。
3. 在模板中,如果要使用一個變量妙黍,語法是:`{{params}}`
4. 訪問模型中的屬性或者是字典悴侵,可以通過`{{params.property}}`的形式,或者是使用`{{params['age']}}`.
### 過濾器:
1. 介紹和語法:
????* 介紹:過濾器可以處理變量拭嫁,把原始的變量經(jīng)過處理后再展示出來可免。作用的對象是變量。
????* 語法:
????????```
????????{{ avatar|default('xxx') }}
????????```
2. default過濾器:如果當(dāng)前變量不存在做粤,這時候可以指定默認(rèn)值浇借。
3. length過濾器:求列表或者字符串或者字典或者元組的長度。
4. 常用的過濾器:
????abs(value):返回一個數(shù)值的絕對值怕品。示例:-1|abs
????default(value,default_value,boolean=false):如果當(dāng)前變量沒有值妇垢,則會使用參數(shù)中的值來代替。示例:name|default('xiaotuo')——如果name不存在肉康,則會使用xiaotuo來替代闯估。boolean=False默認(rèn)是在只有這個變量為undefined的時候才會使用default中的值,如果想使用python的形式判斷是否為false吼和,則可以傳遞boolean=true睬愤。也可以使用or來替換。
????escape(value)或e:轉(zhuǎn)義字符纹安,會將<、>等符號轉(zhuǎn)義成HTML中的符號砂豌。示例:content|escape或content|e厢岂。
????first(value):返回一個序列的第一個元素。示例:names|first
????format(value,*arags,**kwargs):格式化字符串阳距。比如:
??????{{ "%s" - "%s"|format('Hello?',"Foo!") }}
??????將輸出:Helloo? - Foo!
????last(value):返回一個序列的最后一個元素塔粒。示例:names|last。
????length(value):返回一個序列或者字典的長度筐摘。示例:names|length卒茬。
????join(value,d=u''):將一個序列用d這個參數(shù)的值拼接成字符串船老。
????safe(value):如果開啟了全局轉(zhuǎn)義,那么safe過濾器會將變量關(guān)掉轉(zhuǎn)義圃酵。示例:content_html|safe柳畔。
????int(value):將值轉(zhuǎn)換為int類型。
????float(value):將值轉(zhuǎn)換為float類型郭赐。
????lower(value):將字符串轉(zhuǎn)換為小寫薪韩。
????upper(value):將字符串轉(zhuǎn)換為小寫。
????replace(value,old,new): 替換將old替換為new的字符串捌锭。
????truncate(value,length=255,killwords=False):截取length長度的字符串俘陷。
????striptags(value):刪除字符串中所有的HTML標(biāo)簽,如果出現(xiàn)多個空格观谦,將替換成一個空格拉盾。
????trim:截取字符串前面和后面的空白字符。
????string(value):將變量轉(zhuǎn)換成字符串豁状。
????wordcount(s):計算一個長字符串中單詞的個數(shù)捉偏。
### if判斷:
1. 語法:?
????```
????{% if xxx %}
????{% else %}
????{% endif %}
????```
2. if的使用,可以和python中相差無幾替蔬。
### for循環(huán)遍歷列表和字典:
1. 字典的遍歷告私,語法和`python`一樣,可以使用`items()`承桥、`keys()`驻粟、`values()`、`iteritems()`凶异、`iterkeys()`蜀撑、`itervalues()`
????```
????{% for k,v in user.items() %}
????????<p>{{ k }}:{{ v }}</p>
????{% endfor %}
????```
2. 列表的遍歷:語法和`python`一樣。
????```
????{% for website in websites %}
????????<p>{{ website }}</p>
????{% endfor %}
????```
### 繼承和block:
1. 繼承作用和語法:
????* 作用:可以把一些公共的代碼放在父模板中剩彬,避免每個模板寫同樣的代碼酷麦。
????* 語法:
????????```
????????{% extends 'base.html' %}
????????```
2. block實(shí)現(xiàn):
????* 作用:可以讓子模板實(shí)現(xiàn)一些自己的需求。父模板需要提前定義好喉恋。
????* 注意點(diǎn):字模板中的代碼沃饶,必須放在block塊中。
### url鏈接:使用`url_for(視圖函數(shù)名稱)`可以反轉(zhuǎn)成url轻黑。
### 加載靜態(tài)文件:
1. 語法:`url_for('static',filename='路徑')`
2. 靜態(tài)文件糊肤,flask會從`static`文件夾中開始尋找,所以不需要再寫`static`這個路徑了氓鄙。
3. 可以加載`css`文件馆揉,可以加載`js`文件,還有`image`文件抖拦。
????```
????第一個:加載css文件
????<link rel="stylesheet" href="{{ url_for('static',filename='css/index.css') }}">
????第二個:加載js文件
????<script src="{{ url_for('static',filename='js/index.js') }}"></script>
????第三個:加載圖片文件
????<img src="{{ url_for('static',filename='images/zhiliao.png') }}" alt="">