python web框架Flask学习笔记(五)模板的控制结构

python web框架Flask学习笔记(五)模板的控制结构

redballoon
2022-11-27 / 0 评论 / 8 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年02月20日,已超过36天没有更新,若内容或图片失效,请留言反馈。

简介

flask.jpg
在模板中使用的控制结构,主要有 iffor 。下面会详细讲解使用方法。

if控制结构的使用

if 的使用语法规则:

# 模板中的if控制结构
{% if 条件 %}
    符合条件执行的html代码
{% endif %}  # 必须要有,作为结束

当然在模板中也是支持 if---else 结构的。

使用也是一样

# {% if 条件 %}
#     中间写为True执行的代码
# {% else %}
#     中间写为False执行的代码
# {% endif %}

其实,在模板中使用控制结构就同在python中是基本相同的,不过是加了 {% %} 框起来了而已, 这是jinja2中设置好的规则。

{% %}是Jinja2中的控制语句,{{ }}是Jinja2中的变量,{# #}是注释。

案例理解:

flask程序中:

from flask import Flask, render_template

app = Flask(__name__)


#@app.route('/page')
#def index(name):
    # 定义一个变量在模板中使用
#    uname = '披甲龙龟'
#    return render_template('Process-control-if.html', test_data=locals())


@app.route('/page/<name>')
def page_name(name):
    # uname = '披甲龙龟'  
    str_name = name
    return render_template('Process-control-if.html', test_data=locals())


@app.route('/info')
def info():
    return '<img src="https://p1.ssl.qhimg.com/t014ee57f018c046471.jpg">'


if __name__ == '__main__':
    app.run(debug=True)

模板文件中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<style>
    .test1 {
        color: #f60;
        text-aline:center;
    }
</style>
<body>
{% if test_data.uname %}
    <h1 class="test1">Hello ~ {{test_data.uname}}</h1>
{% endif %}
<!-- 在这里意思是如果uname存在,会执行Hello ~ uname的值,否则什么都不执行 对应index视图-->

{% if test_data.uname %}
    <h1 class="test1">Hello ~ {{test_data.uname}}</h1>
{% else %}
    <h1 class="test1">Hello World ~ {{test_data.name}}🤭
{% endif %}
<!-- 同上面相同,如果不存在时会执行Hello World ~ <name>地址栏输入的值 对应page_name视图-->
        
<!--这里讲url_for在模板中反向解析的用法-->
{% if test_data.uname %}
    <h2><a href="{{url_for('info')}}">关于我</a></h2>
{% endif %}
</body>
</html>

这里就不运行给大家看了。

for控制结构的使用

for的使用语法规则:

# 模板中的for控制结构
{% for 变量 in 可迭代对象(list/tuple/dict/set/str...) %}
#     中间写循环体(html代码或动态变量)
{% endfor %}  # 作为结束,必须有

for语句在模板中的使用很广泛,遍历,循环,通常需要传递多个变量时,会在视图函数中封装成字典、列表、元组等类型数据,这样我们只需要传递一个可迭代的变量再通过模板的for控制结构遍历出数据就实现多个数据的传递。

案例理解:

flask程序中:

from random import choice
from flask import Flask, render_template

app = Flask(__name__)


@app.route('/page')
def index():
    uname = '披甲龙龟'
    # 随机 abcd
    lis = ['A', 'B', 'C', 'D']
    random_word = [choice(lis) for _ in range(10)]

    # 用模板的for来遍历该字典
    dicts_data = {
        '疾风剑豪': '亚索',
        '暗裔剑魔': '亚托克斯',
        '无双剑姬': '菲奥娜',
        '无极剑圣': '易',
    }
    return render_template('Process-control-for.html', test_data=locals())


if __name__ == '__main__':
    app.run(debug=True)

模板文件中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% if True%}
    <h1 class="test1">Hello ~ {{test_data.uname}}</h1>
{% endif %}

<!--模板中使用 for 循环结构-->
<!--list-->
<ul>
{% for li in test_data.random_word %}
    <li><h2>{{li}}</h2></li>
{% endfor %}
</ul>


<!--dict-->
<div>
{% for k,v in test_data.dicts_data.items() %}
    <p>{{k}}:{{v}}</p>
{% endfor %}
</div>
    
</body>
</html>

运行结果:

Snipaste_2022-11-27_17-30-58.png

0

评论 (0)

取消