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>
  • 相关阅读:
    129 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 03 饿汉模式 VS 懒汉模式 02 懒汉式的代码实现
    128 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 03 饿汉模式 VS 懒汉模式 01 饿汉式的代码实现
    127 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 02 单例模式概述 01 单例模式的定义和作用
    126 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 01 设计模式概述 01 设计模式简介
    125 01 Android 零基础入门 02 Java面向对象 05 Java继承(下)05 Java继承(下)总结 01 Java继承(下)知识点总结
    leetcode-----121. 买卖股票的最佳时机
    leetcode-----104. 二叉树的最大深度
    Json串的字段如果和类中字段不一致,如何映射、转换?
    Mybatis-Plus的Service方法使用 之 泛型方法default <V> List<V> listObjs(Function<? super Object, V> mapper)
    模糊查询
  • 原文地址:https://www.cnblogs.com/open-yang/p/11177245.html
Copyright © 2011-2022 走看看