模板标签之if、for
if标签
if标签相当于Python中的if语句,有elif和else相对应,但是所有的标签
都需要用标签符号({%%})进行包裹。if标签中可以使用 ==、!=、<、<=、>、>=、in、notin、is、is not等判断运算符。
{% if "张三" in persons %}
<p>张三</p>
{% else %}
<p>李四</p>
{% endif %}
for...in... 标签
for...in...类似于Python中的 for...in... 可以遍历列表、元组、字符串、字典等一切可以遍历的对象。
-
views.py示例
def jiajia(request): context = { 'books': [ '三国演义', '水浒传', '红楼梦', '西游记', ] } return render(request, 'index.html', context=context)
-
urls示例
from django.urls import path from . import views urlpatterns = [ path('index2/', views.jiajia), ]
-
html示例
<ul> {% for book in books %} <p>{{ book }}</p> {% endfor %} </ul>
-
效果:
如果想要反向遍历,那么在遍历的时候就加上一个 reversed
-
反向遍历示例代码
<ul> {% for book in books reversed %} <li>{{book}}</li> {% endfor %} </ul>
遍历字典的形式:
-
views示例代码:
context = { 'person': { 'uername': 'jiajia', 'age': 18, 'height': 180 } }
-
html示例代码
<ul> {% for key in person.keys %} <li>{{ key }}</li> {% endfor %} </ul>
这样就是把person内的所有key打印出来,同理修改person.values即可得到所有的values。items亦是如此。
-
items示例代码
<ul> {% for key,value in person.items%} <li>{{key}}:{{value}}</li> {% endfor %} </ul>
在for循环中, DTL提供了一些变量可供使用。
- forloop.counter:当前循环的下标。以1作为起始值。
- forloop.counter0:当前循环的下标。以0作为起始值。
- forloop.revcounter:当前循环的反向下标值。比如列表有5个元素,那么第一次遍历这个属性是等于5,第二次是4,以此类推。并且是以1作为最后一个元素的下标。
- forloop.revcounter0:类似于forloop.revcounter。不同的是最后一个元素的下标是从0开始。
- forloop.first:是否是第一次遍历。
- forloop.last:是否是最后一次遍历。
for...in...empty标签:
这个标签使用跟 for...in...是一样的,只不过是在遍历的对象如果没有元素的情况下,会执行empty中的内容。
-
示例代码:
{% for comment in comments %} <li>{{ comment }}</li> {% empty %} 没有任何评论 {% endfor %}