zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    (转)S5PV210之UBOOT2011.06启动过程解析
    (转)S5PV2101210启动方式和代码前16字节
    (转)UBoot启动过程详细版的完全分析
    uboot中.lds连接脚本文件的分析
    makefile中的@
    (转)GNU ARM汇编(十七)uboot的makefile和mkconfig解读
    (转)关于uboot中的.balignl 16,0xdeadbeef的理解
    (转)ARM协处理学习
    linux下拷贝的时候有时候会出现cp:omitting directory的错误
    Quartz JobListener 任务监听器
  • 原文地址:https://www.cnblogs.com/open-yang/p/11177245.html
Copyright © 2011-2022 走看看