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 ‘‘‘ 50 51 from flask import Flask, render_template 52 53 app = Flask(__name__) 54 55 STUDENT = {‘name‘: ‘Old‘, ‘age‘: 38, ‘gender‘: ‘中‘}, 56 57 STUDENT_LIST = [ 58 {‘name‘: ‘Old‘, ‘age‘: 38, ‘gender‘: ‘中‘}, 59 {‘name‘: ‘Boy‘, ‘age‘: 73, ‘gender‘: ‘男‘}, 60 {‘name‘: ‘EDU‘, ‘age‘: 84, ‘gender‘: ‘女‘} 61 ] 62 63 STUDENT_DICT = { 64 1: {‘name‘: ‘Old‘, ‘age‘: 38, ‘gender‘: ‘中‘}, 65 2: {‘name‘: ‘Boy‘, ‘age‘: 73, ‘gender‘: ‘男‘}, 66 3: {‘name‘: ‘EDU‘, ‘age‘: 84, ‘gender‘: ‘女‘}, 67 } 68 69 70 # 模板变量和标签使用 71 @app.route(‘/jinjia2‘) 72 def data(): 73 return render_template(‘jinjia2daemo.html‘, st=STUDENT, stl=STUDENT_LIST, std=STUDENT_DICT) 74 # return render_template(‘jinjia2daemo.html‘,**{‘st‘:STUDENT,‘stl‘:STUDENT_LIST,‘std‘:STUDENT_DICT}) 75 76 77 # 特殊装饰器函数在模板中的全局使用 78 @app.template_global() 79 def sum1(a, b): 80 return a + b 81 82 83 @app.template_filter() 84 def sum2(a, b, c, d): # 第一个参数为模板变量 85 return a + b + c + d 86 87 88 if __name__ == ‘__main__‘: 89 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 <div> 10 <h2>单个学生</h2> {{ st }} 11 </div> 12 <!--模板标签for/if使用--> 13 <div> 14 <h2>列表嵌套字典数据</h2> {{ stl }} 15 <table border="1px"> 16 <tr> 17 <td>name</td> 18 <td>age</td> 19 <td>gender</td> 20 </tr> 21 {% for obj in stl %} 22 <tr> 23 <td>{{ obj.name }}</td> 24 <td>{{ obj.age }}</td> 25 <td> 26 {% if obj.gender in [‘男‘,‘女‘] %} 27 {{ obj.gender }} 28 {% else %} 29 ‘男‘ 30 {% endif %} 31 </td> 32 </tr> 33 {% endfor %} 34 </table> 35 </div> 36 37 <div> 38 <h2>字典嵌套字典数据</h2> {{ stl }} 39 <table border="1px"> 40 <tr> 41 <td>id</td> 42 <td>name</td> 43 <td>age</td> 44 <td>gender</td> 45 </tr> 46 {% for id,data in std.items() %} 47 <tr> 48 <td>{{ id }}</td> 49 <td>{{ data.name }}</td> 50 <td>{{ data.age }}</td> 51 <td> 52 {% if data.gender in [‘男‘,‘女‘] %} 53 {{ data.gender }} 54 {% else %} 55 ‘男‘ 56 {% endif %} 57 </td> 58 </tr> 59 {% endfor %} 60 </table> 61 </div> 62 63 64 <div> 65 <h2>特殊装饰器自定义的函数直接在模板中使用</h2> 66 {{ sum1(1,2) }} 67 <br> 68 {{ 1 | sum2(2,3,4) }} 69 </div> 70 71 72 <!--jinjia2模板语言中的宏定义--> 73 <div> 74 <h2>jinjia2模板语言中的宏定义</h2> 75 <div> 76 {% macro type_text(name,type) %} 77 <input type="{{ type }}" name="{{ name }}" value="{{ name }}"> 78 {% endmacro %} 79 80 {{ type_text("one","text") }} 81 {{ type_text("two","text") }} 82 </div> 83 </div> 84 85 </body> 86 </html>
原文:https://www.cnblogs.com/open-yang/p/11177245.html