005 django的模板语法 逻辑使用 for if

模板语法之逻辑判断

在深度查询语法中,主要针对的是对于变量的值 进行了各种形式上的转变,单位的换算,大小写等,隐藏字符,截断。
对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>

image-20230322164120683

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

posted @ 2023-03-22 17:33  mmszxc  阅读(8)  评论(0)    收藏  举报