模板语法之逻辑判断
在深度查询语法中,主要针对的是对于变量的值 进行了各种形式上的转变,单位的换算,大小写等,隐藏字符,截断。
对py代码在处理业务逻辑中提供了很多的便利性,
对于要在模板文件要展示的数据再进行二次的逻辑处理,
如果在view文件中也可以使用python代码中实现,但是模板语法提供更为优秀的做法。
if 标签
'''
需求:针对学生的成绩进行分类,高于90的显示,优秀,良好及格。
'''
def index(request):
class User(object):
def __init__(self, name, age, levl,sorce):
self.name = name
self.age = age
self.levl = levl
self.sorce = sorce
def __str__(self):
return self.name
user1 = User('张三', 19, '3年级',100)
user2 = User('李四', 20, '1年级',99)
user3 = User('王五', 15, '2年级',59)
user_dict = [user1,user2,user3,]
call_number = '13888886666'
return render(request, 'appo1/index.html', locals())
![image-20230322155731717]()
### > 判断的符号左右要有空格
<div>
{% if name %}
<span>欢迎用户: {{ name }}</span>
{% else %}
<span> 请登录 </span>
{% endif %}
</div>
# 适用的场景, 判断变量有值,那么显示欢迎用户,没有值,显示请登录
# 也可以使用js脚本去判断,比较麻烦
for标签
从一个多元素数据数据变量中循环出每一个元素,
结合深度查询语法 和html进行展示,而且可以和if 标签配合显示,
1 列表展示 显示一个列表的
book = ['三国演义','水浒传','红楼梦','西游记',]
<ul>
{% for f in book %}
<li >{{ f }}</li>
{% endfor %}
</ul>
2 表格展示 图书馆的书籍
<table border="1" class="c1">
<tr>
<td>序号</td>
<td>书名</td>
<td>作者</td>
<td>册数</td>
<td>价格</td>
<td>出版社</td>
</tr>
{% for book in book_dict %}
<tr>
<td> {{ forloop.counter }}</td>
{# forloop 是循环标签的计数器能够显示数字 #}
<td>{{ book.name }}</td>
<td>{{ book.author }}</td>
<td>{{ book.bits }}</td>
<td>{{ book.price }}</td>
<td>{{ book.publish }}</td>
</tr>
{% endfor %}
</table>
![image-20230322170313799]()
1、forloop的使用 if + for 配合使用
counter 计数器从1开始计数
counter0 计数器从0开始计数
first 判断是不是第一个元素,布尔值Turn
last 判断是不是最后一个元素,布尔值Turn
#需求 判断价格小于110的书籍 并且 第一个元素 背景色变红,最后一个变蓝
class Books(object):
def __init__(self, name, author, bits, price, publish):
'''
:param name: 书名
:param author: 作者
:param bits: 册数
:param price: 价格
:param publish: 出版社名称
'''
self.name = name
self.author = author
self.bits = bits
self.price = price
self.publish = publish
def __str__(self):
return self.name
book1 = Books('pyhton练习册1', '张三', 5, 100, "山东出版")
book2 = Books('pyhton练习册2', '李四', 6, 300, "四川出版")
book3 = Books('pyhton练习册3', '王五', 7, 500, "广东出版")
book_dict = [book1, book2, book3, ]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1 {
position: relative;
{#left: 400px;#}
top: 200px;
width: 700px
}
.first {
background-color: red;
}
.last {
background-color: #5a915d;
}
</style>
</head>
<body>
{#<ul>#}
{# {% for f in book %}#}
{# <li >{{ f }}</li>#}
{# {% endfor %}#}
{#</ul>#}
<table border="1" class="c1">
<tr>
<td>序号</td>
<td>书名</td>
<td>作者</td>
<td>册数</td>
<td>价格</td>
<td>出版社</td>
</tr>
{% for book in book_dict %}
{#判断元素是不是第一个元素,如果是Turn 添加css样式#}
{% if book.price < 110 and forloop.first %}
<tr class="first">
<td> {{ forloop.counter }}</td>
{# forloop 是循环标签的计数器能够显示数字 #}
<td>{{ book.name }}</td>
<td>{{ book.author }}</td>
<td>{{ book.bits }}</td>
<td>{{ book.price }}</td>
<td>{{ book.publish }}</td>
</tr>
{% elif forloop.last %}
{# 判断是不是最后一个 加其他的颜色#}
<tr class="last" >
<td> {{ forloop.counter }}</td>
{# forloop 是循环标签的计数器能够显示数字 #}
<td>{{ book.name }}</td>
<td>{{ book.author }}</td>
<td>{{ book.bits }}</td>
<td>{{ book.price }}</td>
<td>{{ book.publish }}</td>
</tr>
{% else %}
<tr >
<td> {{ forloop.counter }}</td>
{# forloop 是循环标签的计数器能够显示数字 #}
<td>{{ book.name }}</td>
<td>{{ book.author }}</td>
<td>{{ book.bits }}</td>
<td>{{ book.price }}</td>
<td>{{ book.publish }}</td>
</tr>
{% endif %}
{% endfor %}
</table>
</body>
</html>
![image-20230322173240918]()