赞
踩
Jinja2模板中所有控制语句都放在{% ... %}中,并且以{% endxxx %}来进行结束,Jinja中常用的控制语句有if/for..in..。
if:if语句和python中的类似,可以使用>,<,<=,>=,==,!=来进行判断,也可以通过and,or,not,()来进行逻辑合并操作。
注意:
if 条件判断语句必须放在 {% if statement %} 中间,并且还必须有结束的标签 {% endif %} 。
示例代码1:
main.py
- from flask import Flask, render_template
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- content = {
- "names": {"name": 'dgw'},
- "age": 25,
- "sex": '男'
- }
-
- return render_template('index.html', **content)
-
-
- if __name__ == '__main__':
- app.run()
index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>首页</title>
- </head>
- <body>
- 欢迎来到首页!
- <div>
- {% if age > 25 %}
- 您已经超过25岁了!
- {% elif age < 25 %}
- 您的年龄小于25岁!
- {% else %}
- 您的年龄今年25岁了!
- {% endif %}
- </div>
-
- </body>
- </html>
运行结果:
示例代码2:
main.py
- from flask import Flask, render_template, request
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- return render_template('index.html')
-
-
- @app.route('/login')
- def login():
- user = request.args.get('user')
- return render_template('index.html', user=user)
-
-
- if __name__ == '__main__':
- app.run(debug=True)
index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>首页</title>
- </head>
- <body>
- <span>中国大陆</span>
- {% if not user %}
- <a href="{{url_for('login',user='dgw')}}">亲,请登录</a>
- <span>免费注册</span>
- {% else %}
- <span> {{user}} </span>
- {% endif %}
- <span>手机逛淘</span>
- </body>
- </html>
运行结果:
for...in...:for循环可以遍历任何一个序列,包括列表、字典、元组。并且可以进行反向遍历。
main.py
- from flask import Flask, render_template
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- name_list = ['张三', '李四', '王五']
-
- return render_template('index.html', name_list=name_list)
-
-
- if __name__ == '__main__':
- app.run()
index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>首页</title>
- </head>
- <body>
- 欢迎来到首页!
- <ul>
- {% for name in name_list %}
- <li>{{ name }}</li>
- {% endfor %}
- </ul>
-
- </body>
- </html>
运行结果:
main.py
- from flask import Flask, render_template
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- name_dict = {
- 'name1': '张三',
- 'name2': '李四',
- 'name3': '王五'
- }
-
- return render_template('index.html', name_dict=name_dict)
-
-
- if __name__ == '__main__':
- app.run()
index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>首页</title>
- </head>
- <body>
- 欢迎来到首页!
- <ul>
- {% for key, value in name_dict.items() %}
- <li>{{ key }}:{{ value }}</li>
- {% endfor %}
- </ul>
-
- </body>
- </html>
运行结果:
main.py
- from flask import Flask, render_template
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- name_dict = {
- }
-
- return render_template('index.html', name_dict=name_dict)
-
-
- if __name__ == '__main__':
- app.run()
index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>首页</title>
- </head>
- <body>
- 欢迎来到首页!
- <ul>
- {% for key, value in name_dict.items() %}
- <li>{{ key }}:{{ value }}</li>
- {% else %}
- <li>Not found!</li>
- {% endfor %}
- </ul>
-
- </body>
- </html>
运行结果:
示例代码:
main.py
- from flask import Flask, render_template
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- name_dict = {
- 'name1': '张三',
- 'name2': '李四',
- 'name3': '王五'
- }
-
- return render_template('index.html', name_dict=name_dict)
-
-
- if __name__ == '__main__':
- app.run()
index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>首页</title>
- </head>
- <body>
- 欢迎来到首页!
- <ul>
- {% for key, value in name_dict.items() | reverse %}
- <li>{{ key }}:{{ value }}</li>
- {% else %}
- <li>Not found!</li>
- {% endfor %}
- </ul>
-
- </body>
- </html>
运行结果: 【注意:显示结果和2.2相比已经发生变化】
Jinja中的for循环还包含以下变量,可以用来获取当前的遍历状态:
变量 | 描述 |
---|---|
loop.index | 当前迭代的索引(从1开始) |
loop.index0 | 当前迭代的索引(从0开始) |
loop.first | 是否是第一次迭代,返回True或False |
loop.last | 是否是最后一次迭代,返回True或False |
loop.length | 序列的长度 |
注意:不可以使用continue和break表达式来控制循环的执行。
在 jinja2 中的 for 循环,跟 python 中的 for 循环基本上是一模一样的也是 for...in... 的形式。并且也可以遍历所有的序列以及迭代器唯一不同的是, jinja2 中的 for 循环没有 break 和 continue 语句。
示例代码:
index.html
-
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>循环练习</title>
- </head>
- <body>
- <h1>循环练习-99乘法表</h1>
- <table border="1">
- {% for x in range(1,10)%}
- <tr>
- {% for y in range(1,x+1)%}
- <td>{{y}} * {{x}} = {{x*y}}</td>
- {% endfor %}
- </tr>
- {% endfor %}
- </table>
- </body>
- </html>
运行结果:
测试器主要用来判断一个值是否满足某种类型,一般通过普通的if判断。语法是:if...is...
示例代码:
main.py
- from flask import Flask, render_template
-
- app = Flask(__name__)
-
-
- @app.route('/')
- def index():
- name_dict = {
- "name": "dgw"
- }
- num = 6
-
- return render_template('index.html', name_dict=name_dict, num=num)
-
-
- if __name__ == '__main__':
- app.run()
index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>首页</title>
- </head>
- <body>
- 欢迎来到首页!
- <div>
- {% if name_dict is string %}
- String value is : {{ name_dict }}
- {% else %}
- The value is not a string!
- {% endif %}
- </div>
- <div>
- {% if num is even %}
- num value is : {{ num }}
- {% else %}
- The value is not a even!
- {% endif %}
- </div>
- </body>
- </html>
运行结果:
其它常见的Jinja2测试器如下表所示:
测试器 | 说明 |
---|---|
callable(object) | 是否可调用 |
defined(object) | 是否已经被定义了。 |
escaped(object) | 是否已经被转义了。 |
upper(object) | 是否全是大写。 |
lower(object) | 是否全是小写。 |
string(object) | 是否是一个字符串。 |
sequence(object) | 是否是一个序列。 |
number(object) | 是否是一个数字。 |
odd(object) | 是否是奇数。 |
even(object) | 是否是偶数。 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。