第六章:FLASK模版引擎以及模版方法
一,上節回顧:
1) 什麽是藍圖?
2) 為什麽用藍圖?
3) 怎麽實例化一個藍圖?
4) 怎麽將藍圖註冊到flask的核心對象上?
二,什麽是模版引擎?
模板引擎(這裏特指用於Web開發的模板引擎)是為了使用戶界面與業務數據(內容)分離而產生的,它可以生成特定格式的文檔,用於網站的模板引擎就會生成一個標準的HTML文檔。(摘自 百度百科)
三,模版引擎都有什麽?flask用的是什麽模版引擎?
模版引擎有很多種,像 PHP(smarty) Python(Janjia,marco) Java(Thymeleaf ,Freemarker) 等
Flask 常用的模版引擎 是 Janjia2
四,模版渲染和傳遞參數
1. 在 app 應用下 新建一個 templates 文件夾,然後裏面新建 user.html 文件
2.在admin/user.py中 引入render_templates
3. 調用瀏覽器 http://127.0.0.1:8888/user
4. templates只能在app下嗎?
flask 框架 默認templates(模版文件)安裝在項目的根目錄下,項目跟目錄是根據flask的核心app一直,所以鑒於本例,templates只能在app下。
如果我不想讓我的模版文件夾在app下,我可不可以更改位置呢?答案是可以的,你可以在 Flask(__name__)這裏更新一下就行,具體代碼如下:
項目目錄:
瀏覽器調用 http://127.0.0.1:8888/user
五,模版語法
1. 變量
數據量小的時候可以選擇此種寫法:
user.py 文件代碼
from app.admin import web from flask import render_template @web.route(‘/user‘) def user(): return render_template(‘user.html‘,name =‘xiaoerhei‘)
user.html 中代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>測試</title>
</head>
<body>
{{ name }}測試頁面
</body>
</html>
瀏覽器調用: http://127.0.0.1:8888/user
數據量大的時候可以選擇此種寫法
user.py
from app.admin import web from flask import render_template @web.route(‘/user‘) def user(): dict = {"name":"pidaye","age":5} return render_template(‘user.html‘,data =dict)
user.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>測試</title> </head> <body> 姓名:{{ data.name }}<br /> 年齡:{{ data.age }} </body> </html>
瀏覽器調用 : http://127.0.0.1:8888/user
2. 過濾器
過濾器的使用方法,變量可以通過 過濾器 修改。過濾器與變量用管道符號( | )分割,並且也 可以用圓括號傳遞可選參數。多個過濾器可以鏈式調用,前一個過濾器的輸出會被作為 後一個過濾器的輸入。
語法: {{ avatar | default(‘xxx‘) }}
user.py
from app.admin import web from flask import render_template @web.route(‘/user‘) def user(): dict = {"name":" pidaye"} return render_template(‘user.html‘,data =dict)
user.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>測試</title>
</head>
<body>
{{ data.name | striptags | upper }}測試頁面
</body>
</html>
過濾器的清單 http://docs.jinkan.org/docs/jinja2/templates.html#builtin-filters
常用的過濾器有:
abs(value):返回一個數值的絕對值。示例:-1|abs
default(value,default_value,boolean=false):如果當前變量沒有值,則會使用參數中的值來代替。
escape(value)或e:轉義字符,會將<、>等符號轉義成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這個參數的值拼接成字符串。
safe(value):如果開啟了全局轉義,那麽safe過濾器會將變量關掉轉義。示例:content_html|safe
int(value):將值轉換為int類型。
float(value):將值轉換為float類型。
lower(value):將字符串轉換為小寫。
upper(value):將字符串轉換為小寫。
replace(value,old,new): 替換將old替換為new的字符串。
truncate(value,length=255,killwords=False):截取length長度的字符串。
striptags(value):刪除字符串中所有的HTML標簽,如果出現多個空格,將替換成一個空格。
trim:截取字符串前面和後面的空白字符
string(value):將變量轉換成字符串
wordcount(s):計算一個長字符串中單詞的個數。
3. if 語句,和python中的if 語句幾乎一樣:
{% if 10>5 %} 10>5 {% else %} 10<5 {% endif %}
4. for 語句,和 python語法幾乎一致
{% for i in range(10)%} {{ i }} {% endfor %}
5. 模版繼承
1. 繼承作用和語法:
作用:可以把一些公共的代碼放在父模板中,避免每個模板寫同樣的代碼。
語法:
{% extends ‘base.html‘ %}
2. block實現:
作用:可以讓子模板實現一些自己的需求。父模板需要提前定義好。
註意點:字模板中的代碼,必須放在block塊中。
語法:
父文件:
{% block 名稱 %}
默認值
{% endblock %}
子文件:
{% block 名稱 %}
這是子文件的內容
{% endblock %}
# 子文件block 的名稱 要和 父文件block 的名稱保證一致
示例:
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>這是頭部</h2>
{% block section %}
{% endblock %}
<h2>這是底部</h2>
</body>
</html>
user.html
{% extends ‘base.html‘ %}
{% block section %}
這是中間位置
{% endblock %}調用
瀏覽器訪問: http://127.0.0.1:8888/user
第六章:FLASK模版引擎以及模版方法