flask之jinjia2模板語言


flask_jinjia2.py

 1 '''
 2 flask中的jinjia2模板語言(和django中模板類似):
 3     (1)模板變量{{ }}
 4 
 5     (2)模板標簽{% %}
 6         ①for循環遍歷
 7             {% for foo in  %}
 8                 ......
 9             {% endfor %}
10         ②if...else判斷
11             {% if %}
12                 ...
13             {% elif %}
14                ...
15             {% else %}
16                 ...
17             {% endif %}
18     (3)模板繼承{% extends  html文件 %},配合模板中定義的block重寫需要改動的部分
19         {% extends 'base.html' %}
20         {% block 模板中塊名 %}
21             ......
22         {% endblock %}
23 
24     (4)模板組件{% include html文件 %}在頁面中引入html組件
25 
26     (5)通過后端特殊裝飾器定義函數在模板中直接時候用
27         ①@app.template_global()裝飾的函數直接以模板變量函數調用方式使用,如{{ sum(1,2) }}
28         ②@app.template_filter()裝飾的函數直接以模板變量過濾器形式使用,第一個參數自動為變量,如{{ 1 | sum2(2,3,4) }}
29 
30     (6)jinjia2模板語言中的宏定義
31           在模板中先定義:
32             {% macro  定義宏(形參,形參...)   %}
33                 html標簽使用參數
34             {% endmacro %}
35 
36           在模板中使用定義的宏:
37             {{ 宏(實參,實參...) }}
38 
39         實例:
40         <div>
41             {% macro type_text(name,type) %}
42             <input type="{{ type }}" name="{{ name }}" value="{{ name }}">
43             {% endmacro %}
44 
45             {{ type_text("one","text") }}
46             {{ type_text("two","text") }}
47         </div>
48 
49     (7)模板過濾器safe及flask中的Markup使用
50         返回html標簽可以在模板中使用過濾器safe確保安全正常渲染成標簽
51         也可以在后端flask項目中通過Markup()實例化之后記性渲染
52 
53 '''
54 
55 from flask import Flask, render_template,Markup
56 
57 app = Flask(__name__)
58 
59 STUDENT = {'name': 'Old', 'age': 38, 'gender': ''},
60 
61 STUDENT_LIST = [
62     {'name': 'Old', 'age': 38, 'gender': ''},
63     {'name': 'Boy', 'age': 73, 'gender': ''},
64     {'name': 'EDU', 'age': 84, 'gender': ''}
65 ]
66 
67 STUDENT_DICT = {
68     1: {'name': 'Old', 'age': 38, 'gender': ''},
69     2: {'name': 'Boy', 'age': 73, 'gender': ''},
70     3: {'name': 'EDU', 'age': 84, 'gender': ''},
71 }
72 
73 
74 # 模板變量和標簽使用以及Markup()返回標簽
75 @app.route('/jinjia2')
76 def data():
77     title='<h2>后端Markup()返回的標簽</h2>'
78     markup_title=Markup(title)
79     return render_template('jinjia2daemo.html', st=STUDENT, stl=STUDENT_LIST, std=STUDENT_DICT,title=markup_title)
80     # return render_template('jinjia2daemo.html',**{'st':STUDENT,'stl':STUDENT_LIST,'std':STUDENT_DICT})
81 
82 
83 # 特殊裝飾器函數在模板中的全局使用
84 @app.template_global()
85 def sum1(a, b):
86     return a + b
87 
88 @app.template_filter()
89 def sum2(a, b, c, d):  # 第一個參數為模板變量
90     return a + b + c + d
91 
92 
93 
94 if __name__ == '__main__':
95     app.run(debug=True)

 

jinjia2daemo.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>data</title>
 6 </head>
 7 <body>
 8 
 9 
10 <div>{{ title }}</div>
11 
12 <!--單個模板變量使用-->
13 <div>
14     <h2>單個學生</h2> {{ st }}
15 </div>
16 <!--模板標簽for/if使用-->
17 <div>
18     <h2>列表嵌套字典數據</h2> {{ stl }}
19     <table border="1px">
20         <tr>
21             <td>name</td>
22             <td>age</td>
23             <td>gender</td>
24         </tr>
25         {% for obj in stl %}
26             <tr>
27                 <td>{{ obj.name }}</td>
28                 <td>{{ obj.age }}</td>
29                 <td>
30                     {% if obj.gender in ['男','女'] %}
31                         {{ obj.gender }}
32                     {% else %}
33                         '男'
34                     {% endif %}
35                 </td>
36             </tr>
37         {% endfor %}
38     </table>
39 </div>
40 
41 <div>
42     <h2>字典嵌套字典數據</h2> {{ stl }}
43     <table border="1px">
44         <tr>
45             <td>id</td>
46             <td>name</td>
47             <td>age</td>
48             <td>gender</td>
49         </tr>
50         {% for id,data in std.items() %}
51             <tr>
52                 <td>{{ id }}</td>
53                 <td>{{ data.name }}</td>
54                 <td>{{ data.age }}</td>
55                 <td>
56                     {% if data.gender in ['男','女'] %}
57                         {{ data.gender }}
58                     {% else %}
59                         '男'
60                     {% endif %}
61                 </td>
62             </tr>
63         {% endfor %}
64     </table>
65 </div>
66 
67 
68 <div>
69     <h2>特殊裝飾器自定義的函數直接在模板中使用</h2>
70     {{ sum1(1,2) }}
71     <br>
72     {{ 1 | sum2(2,3,4) }}
73 </div>
74 
75 
76 <!--jinjia2模板語言中的宏定義-->
77 <div>
78     <h2>jinjia2模板語言中的宏定義</h2>
79     <div>
80             {% macro type_text(name,type) %}
81             <input type="{{ type }}" name="{{ name }}" value="{{ name }}">
82             {% endmacro %}
83 
84             {{ type_text("one","text") }}
85             {{ type_text("two","text") }}
86         </div>
87 </div>
88 
89 
90 
91 
92 </body>
93 </html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM