zoukankan      html  css  js  c++  java
  • Flask 模板语法

    Flask中默认的模板语言是Jinja2

    STUDENT = {'name': 'Old', 'age': 38, 'gender': ''},
    
    STUDENT_LIST = [
        {'name': 'pj', 'age': 38, 'gender': ''},
        {'name': 'lc', 'age': 73, 'gender': ''},
        {'name': 'fy', 'age': 84, 'gender': ''}
    ]
    
    STUDENT_DICT = {
        1: {'name': 'pj', 'age': 38, 'gender': ''},
        2: {'name': 'lc', 'age': 73, 'gender': ''},
        3: {'name': 'fy', 'age': 84, 'gender': ''},
    }

    Jinja2模板中的流程控制:

    I. Jinja2模板语言中的 for

    {% for foo in g %}
    
    {% endfor %}

    II. Jinja2模板语言中的 if

    {% if g %}
    
    {% elif g %}
        
    {% else %}
        
    {% endif %}

     

    1. 使用STUDENT字典传递至前端

    后端:

    @app.route("/student")
    def index():
        return render_template("student.html", student=STUDENT)

    前端:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Old Boy EDU</title>
    </head>
    <body>
    Welcome to Old Boy EDU
    <div>{{ student }}</div>
    <table border="1px">
        <tr>
            <td>{{ student.name }}</td>
            <td>{{ student["age"] }}</td>
            <td>{{ student.get("gender") }}</td>
        </tr>
    </table>
    </body>
    </html>

    从这个例子中,可以看出来,字典传入前端Jinja2 模板语言中的取值操作, 与Python中的Dict操作极为相似,并且多了一个student.name的对象操作

    2. STUDENT_LIST 列表传入前端Jinja2 模板的操作:

    后端:

    @app.route("/student_list")
    def student_list():
        return render_template("student_list.html", student=STUDENT_LIST)

    前端:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Old Boy EDU</title>
    </head>
    <body>
    Welcome to Old Boy EDU
    <div>{{ student }}</div>
    <table border="1xp">
        {% for foo in student %}
            <tr>
                <td>{{ foo }}</td>
                <td>{{ foo.name }}</td>
                <td>{{ foo.get("age") }}</td>
                <td>{{ foo["gender"] }}</td>
            </tr>
        {% endfor %}
    </table>
    </body>
    </html>

    如果是需要循环遍历的话,Jinja2 给我们的方案是

        {% for foo in student %}
            <tr>
                <td>{{ foo }}</td>
            </tr>
        {% endfor %}

    上述代码中的 foo 就是列表中的每一个字典,再使用各种取值方式取出值即可

    3.STUDENT_DICT 大字典传入前端 Jinja2 模板

    后端:

    @app.route("/student_dict")
    def student_dict():
        return render_template("student_dict.html", student=STUDENT_DICT)

    前端:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Old Boy EDU</title>
    </head>
    <body>
    Welcome to Old Boy EDU
    <table>
        {% for foo in student %}
            <tr>
                <td>{{ foo }}</td>
                <td>{{ student.get(foo).name }}</td>
                <td>{{ student[foo].get("age") }}</td>
                <td>{{ student[foo]["gender"] }}</td>
            </tr>
        {% endfor %}
    </table>
    </body>
    </html>

    在遍历字典的时候,foo 其实是相当于拿出了字典中的Key

     

    4.结合所有的字符串儿全部专递前端Jinja2 模板

    后端:

    @app.route("/allstudent")
    def all_student():
        return render_template("all_student.html", student=STUDENT ,
                               student_list = STUDENT_LIST,
                               student_dict= STUDENT_DICT)

    前端:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Old Boy EDU</title>
    </head>
    <body>
    <div> _____________________________________</div>
    Welcome to Old Boy EDU : student
    <div>{{ student }}</div>
    <table border="1px">
        <tr>
            <td>{{ student.name }}</td>
            <td>{{ student["age"] }}</td>
            <td>{{ student.get("gender") }}</td>
        </tr>
    </table>
    <div> _____________________________________</div>
    Welcome to Old Boy EDU : student_list
    <div>{{ student_list }}</div>
    <table border="1xp">
        {% for foo in student_list %}
            <tr>
                <td>{{ foo }}</td>
                <td>{{ foo.name }}</td>
                <td>{{ foo.get("age") }}</td>
                <td>{{ foo["gender"] }}</td>
            </tr>
        {% endfor %}
    </table>
    <div> _____________________________________</div>
    Welcome to Old Boy EDU : student_dict
    <div>{{ student_dict }}</div>
    <table border="1xp">
        {% for foo in student_dict %}
            <tr>
                <td>{{ foo }}</td>
                <td>{{ student_dict.get(foo).name }}</td>
                <td>{{ student_dict[foo].get("age") }}</td>
                <td>{{ student_dict[foo]["gender"] }}</td>
            </tr>
        {% endfor %}
    </table>
    </body>
    </html>

    render_template中可以传递多个关键字

    5.利用 **{}字典的方式传递参数

    前端不变(标题4的前端代码)

    后端:

    @app.route("/allstudent")
    def all_student():
        return render_template("all_student.html", **{"student":STUDENT ,
                               "student_list" : STUDENT_LIST,
                               "student_dict": STUDENT_DICT})
  • 相关阅读:
    sql server 删除重复数据新思路
    sqlserver 迁移 mysql
    ASP.NET Web deployment task failed. 请与服务器管理员联系,检查授权和委派设置 部署任务失败的解决方案
    数据库交互之减少IO次数
    sqlserver 安全设置
    windows设置相对路径的快捷方式
    利用SignalR实现实时推送信息
    image magick 备忘
    dotnetCore开发中遇到的一些问题
    “NETSDK1061: 项目是使用 Microsoft.NETCore.App 版本 2.1.14 还原的, 但使用当前设置, 将改用版本 2.1.0。”的处理方法
  • 原文地址:https://www.cnblogs.com/zbw582922417/p/10284218.html
Copyright © 2011-2022 走看看