- if/else标签
if/else
基本语法格式:
{% if condition %} ... display {% endif %} 或 {% if condition1 %} ... display 1 {% elif condition2 %} ... display 2 {% else %} ... display 3 {% endif %}
- 可以根据条件判断是否输出,并且
if/else
支持嵌套 - {% if %}标签接收
and
、or
、not
等关键字对多个变量进行判断,这点和python基础的流程控制是一样的 - 下面来看案例:
- 修改index_test.py视图文件
#-*- coding: utf-8 -*- from django.shortcuts import render def hello(request): test_view = 95 return render(request,"test.html",{"test":test_view})
- 修改test.py文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> {%if test > 90 and test <= 100 %} 优秀 {% elif test > 60 and test <= 90 %} 合格 {% else %} 一边玩去~ {% endif %} </body> </html>
- 访问页面
- for标签
{% for %}
允许我们在一个序列上迭代,与Python中的for循环类似,每一次循环中,模板系统会渲染在{% for %}
和{% endfor %}
之间的所有内容- 下面来看案例:
- 修改index_test.py视图文件
#-*- coding: utf-8 -*- from django.shortcuts import render def hello(request): test_view = ["aaa","bbb","ccc","ddd","eee"] return render(request,"test.html",{"test":test_view})
- 修改test.py文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> {% for i in test %} {{ i }} {% endfor %} </body> </html>
- 访问页面
- 给标签增加一个
reversed
可以使列表被反向迭代:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> {% for i in test reversed %} #添加reversed {{ i }} {% endfor %} </body> </html>
- 访问页面
for循环也可以遍历字典,使用.items方法,用变量的解包分别获取键和值,下面来修改index_test.py文件
#-*- coding: utf-8 -*- from django.shortcuts import render def hello(request): test_view = {"name":"测试","age":22}} return render(request,"test.html",{"test":test_view})
修改test.html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> {% for i,j in test.items %} {{ i }}:{{ j }} {% endfor %} </body> </html>
- 访问页面
在{% for %}标签中,可以通过{{forloop}}变量获取循环序号
'forloop.counter':顺序获取循环序号,从 1 开始计算 'forloop.counter0':顺序获取循环序号,从 0 开始计算 'forloop.revcounter':倒序获取循环序号,结尾序号为 1 'forloop.revcounter0':倒序获取循环序号,结尾序号为 0 'forloop.first(一般配合if标签使用)':第一条数据返回 True,其他数据返回 False 'forloop.last(一般配合if标签使用)':最后一条数据返回 True,其他数据返回 False
下面修改文件:
- index_test.py #-*- coding: utf-8 -*- from django.shortcuts import render def hello(request): test_view = ["a","b","c","d","e"] return render(request,"test.html",{"test":test_view}) - test.html#依次使用forloop变量 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> {% for i in test %} {{ forloop.counter }} {{ forloop.counter0 }} {{ forloop.revcounter }} {{ forloop.revcounter0 }} {{ forloop.first }} {{ forloop.last }} {% endfor %} </body> </html>
{{ forloop.counter }}
{{ forloop.counter0 }}
{{ forloop.revcounter }}
{{ forloop.revcounter0 }}
{{ forloop.first }}
{{ forloop.last }}
{% empty %}可选从句,在循环为空时执行,也就是in后面的参数布尔值为False时,下面修改文件
- index_test.py #-*- coding: utf-8 -*- from django.shortcuts import render def hello(request): test_view = [] #设置列表为空 return render(request,"test.html",{"test":test_view}) - test.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>测试</title> </head> <body> {% for i in test %} {{ forloop.counter0 }} {% empty %} 空 {% endfor %} </body> </html>
访问页面
- ifequal/ifnotequal标签
{% ifequal %}
标签可以比较两个值,当比较结果相等时,会显示在{% ifequal %}
和{% endifequal %}
之中所有的值,下面来看案例:
#对比两个模板变量 {% ifequal {{ user }} {{ currentuser }} %} <h1>Welcome!</h1> {% endifequal %}
- 和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签:
{% ifequal section 'sitenews' %} <h1>Site News</h1> {% else %} <h1>No News Here</h1> {% endifequal %}