flask-模板使用
- 模板方法:
- 模板中的url_for跟后台視圖的url_for使用起來基本是一樣的,也可以傳遞參數
- 使用方式
-
{{ url_for('func') }}
- 過濾器:
- 過濾器是通過管道符號 | 進行使用的,例如: {{ name|length }}, 將返回name的長度。過濾器相當於一個函數,把當前的變量傳遞到過濾器中, 然后根據過濾器自己的判斷。再返回相應的值,之后在將結果渲染。
- 常用的內置過濾器:
- abs(value) : 返回一個數值的絕對值。
- -1|abs
- default(value, default_value, boolean=false) : 如果當前的變量沒有值,則使用參數中的值來代替。 name|default('ivy') -- 如果name不存在,則使用ivy來代替。boolean=false默認是在這個變量為undefined的時候才會使用的default的值。當這個變量又被定義,但是這個變量為Flase(None , False, 及其各種數據類型的空類型)時,會返回相應的值,這時候只要將boolean=True,就會渲染默認的值。
- or:
- {{ value1 or value2 }} 和python自帶的or一樣。
- escape(value)或e: 轉義字符,會將 < 、> 等符號轉義成html中的符號.
- content|escape 或者 content|e
- safe(value): 關閉自動轉義
- {{ content|safe }}
- first(value) 返回一個序列的第一個元素。 name|first
- format(value, *args, **kwargs) : 格式化字符串:
- {{ "%s" - "%s"|format('hello', 'world') }}
- last(value): 返回一個序列的最后一個元素
- name|last
- length(value)
- name|length
- join(value, format_key): 跟python的join一樣
- int(value): 轉換為int整型
- float(value): 轉換為float類型
- lower(value): 轉換為小寫
- upper(upper): 轉換為大寫
- replace(value, old, new): 字符串替換
- truncate(value, length=255, killwords=False): 截取length長度的字符串
- striptags(value): 刪除字符串中的所有html標簽,如果出現空格,將替換成一個空格
- trim: 截取字符串前面和后面的空白字符串
- 更多的過濾器:http://docs.jinkan.org/docs/jinja2/templates.html#builtin-filters
-
- 自定義過濾器:
- 過濾器本身是一個可以在模板中使用的函數,然后對傳進來的參數做一定的處理返回給模板
- 自定義的過濾器需要在flask中注冊
- 過濾器的第一個參數是使用過濾器的模板變量,過濾器的返回結果是過濾器的返回值。
- 下面實現一個簡單的性別轉換的過濾器
-
1 from flask import Flask, render_template 2 3 app = Flask(__name__) 4 5 6 @app.route('/') 7 def index(): 8 context = { 9 'sex': 1 10 } 11 return render_template('index.html', **context) 12 13 14 @app.template_filter('sex_trans') 15 def sex_trans(value): 16 rote = { 17 1: 'male', 18 0: 'female' 19 } 20 return rote.get(value) 21 22 23 if __name__ == '__main__': 24 app.run()
- 自定義過濾器:
- 模板標簽
- {% autoescape off %} content {% endautoescape %}
- 將content里面的內容取消轉義
- {% if ...... %} do something {% else %} do something {% endid %}
- 條件判斷
- {% for sth in sths %} do something about {{ sth }} {% endfor %}
- for 循環
- for 循環可以接range函數
- for 循環中配合使用
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% for i in range(0,10) %} <p>{{ i }} - {{ loop.index }} - {{ loop.first }} - {{ loop.last }} - {{ loop.length }} - {{ loop.nextitem }}</p> {% endfor %} </body> </html>
- loop.index: 返回該次for循環的次數,默認從1開始排序
- loop.index0: 制定for循環從第幾次開始排序,返回當次的次數
- loop.first: 判斷是否為第一次for循環,返回bool值
- loop.last:
- loop.length:返回for循環的總次數
- loop.nextitem:返回for循環的下次的值
-
- {% autoescape off %} content {% endautoescape %}
- 加載靜態文件
- flask加載靜態文件采用url_for函數
- {{ url_for('static', filename='靜態文件的路徑') }}
- url_for的第一個參數是加載靜態文件的文件夾的名字,默認為static, filename為你的靜態資源相對static文件的相對路徑。
- flask加載靜態文件采用url_for函數