当前位置:   article > 正文

Jinjia2模板控制语句

jinjia2

Jinjia2

Jinjia2是基于python的一个引擎,Flask使用jinja2作为框架的模板系统。

1.Jinjia2中的装载方式

在Jinjia2中{{ 变量名 }}用来装载变量,模板渲染的时候,会把这个变量代表的值替换掉。并且可以间接访问一个变量的属性或者一个字典的key。关于点.号访问和[]中括号访问,没有任何区别,都可以访问属性和字典的值。

在Jinjia2中{% 控制语句 %}用来装载一个控制语句,例如if语句、for循环语句等。

在Jinjia2中{# 注释 #}用来装载一个注释,模板渲染的时候会忽视这中间的值。

2.变量和注释的装载

我们如果需要在导入的html文件中装载python文件中的变量,就需要首先对变量进行渲染,再通过{{ 变量名 }}的方式在html页面中装载,例如,我们新建一个app.py实例文件,并写入以下代码,

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/variables/')
def variables():
    contest = {
        'name': 'wangdaye',
        'age': 75,
        'country': 'China',
        'children': {
            'name': 'yuqian',
            'age': 48,
        }
    }  # contest为要渲染的内容
    return render_template('variables.html', **contest)  # 第二个参数为对contest字典进行渲染


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

我们再新建一个variables.html文件,代码如下,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>变量的装载</title>
</head>
<body>
<p>{{ name }}</p>  // 通过{{ name }}将contest中的name键对应的值装载进来
{# 通过{{ name }}将contest中的name键对应的值装载进来 #}  // 这是注释
<p>{{ age }}</p>
<p>{{ country }}</p>
<p>{{ children['name'] }}</p>  // 使用[]对children中的name键进行访问
<p>{{ children.age }}</p>  // 使用.对children中的age键进行访问
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.控制语句的加载

在Jinjia2中{% 控制语句 %}用来装载一个控制语句。

3.1.if控制语句的加载

下面我们来加载一个if控制语句,新建一个app.py实例文件,代码如下,

from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)


@app.route('/if/')
def if_control():
    contest = {
        'name': 'zhangsan',
        'age': 20
    }
    return render_template('if.html', **contest)


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

我们再新建一个if.html文件,代码如下,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>if控制语句</title>
</head>
<body>
    {% if name %}  // 判断name变量是否为真,注意这里变量无需通过{{ 变量名 }}的方式来表示
        <p><b>您好,{{ name }}</b></p>
    {% endif %}
    {% if age >= 18 %}  // 判断age变量是否大于18
        <p><b>成年人</b></p>
     {% else %}
        <p><b>未成年人</b></p>
    {% endif %}
</body>
</html>~
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
3.2.for控制语句的装载

下面我们来加载一个for控制语句,与上例相同,新建一个app.py实例文件,代码如下,

from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)


@app.route('/for/')
def for_control():
    contest = {
        'books': [
            {
                'name': '三国演义',
                'author': '罗贯中',
                'price': 70
            },
            {
                'name': '西游记',
                'author': '吴承恩',
                'price': 70
            },
            {
                'name': '红楼梦',
                'author': '曹雪芹',
                'price': 70
            },
            {
                'name': '水浒传',
                'author': '施耐庵',
                'price': 70
            }
        ]
    }
    return render_template('for.html', **contest)


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

新建一个for.html文件,代码如下,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>for控制语句</title>
</head>
<body>
<table>
    <tr>
        <th>书名</th>
        <th>作者</th>
        <th>价格</th>
    </tr>
    {% for book in books %}
    <tr>
        {% for value in book.values() %}
            <td>{{ value }}</td>
        {% endfor %}
    </tr>
    {% endfor %}
</table>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

4.传参

我们看下面这个app.py实例文件和login.html、index.html文件,

from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)


@app.route('/s/<id>')
def login(id):
    contest = {
        'id': id
    }
    return render_template('index.html', **contest)


@app.route('/login/')
def index():
    return render_template('login.html')


if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

login.html,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登陆页面</title>
</head>
<body>
<h2><a href="{{ url_for('login', id='zhangsan') }}">登录</a></h2>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

index.html,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h2>欢迎{{ id }}登录</h2>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

我们这里从路径“/login/”进入,会出现一个超链接指向login()函数所在路径,即“/s/”,这里我们发现访问路径和login()函数存在一个id参数,所以,我们需要给url_for()函数添加新的参数,该参数会传递给访问路径和login()函数作为login()的id参数。之后,login()函数会对id参数进行渲染传递给index.html文件。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号