1. 程式人生 > >027:for標籤使用詳解

027:for標籤使用詳解

for標籤使用詳解:

for...in... 標籤: for...in... 類似於 Python 中的 for...in... 。可以遍歷列表、元組、字串、字典等一切可以遍歷的物件。示例程式碼如下:

{% for person in persons %}
    <p>{{ person.name }}</p>
{% endfor %}

如果想要反向遍歷,那麼在遍歷的時候就加上一個 reversed 。示例程式碼如下:

{% for person in persons reversed %}
    <p>{{ person.name }}</p>
{
% endfor %}

遍歷字典的時候,需要使用 items 、 keys 和 values 等方法。在 DTL 中,執行一個方法不能使用圓括號的形式。遍歷字典示例程式碼如下:

{% for key,value in person.items %}
    <p>key:{{ key }}</p>
    <p>value:{{ value }}</p>
{% endfor %}

在 for 迴圈中, DTL 提供了一些變數可供使用。這些變數如下:

  • forloop.counter :當前迴圈的下標。以1作為起始值。
  • forloop.counter0 :當前迴圈的下標。以0作為起始值。
  • forloop.revcounter :當前迴圈的反向下標值。比如列表有5個元素,那麼第一次遍歷這個屬性是等於5,第二次是4,以此類推。並且是以1作為最後一個元素的下標。
  • forloop.revcounter0 :類似於forloop.revcounter。不同的是最後一個元素的下標是從0開始。
  • forloop.first :是否是第一次遍歷。
  • forloop.last :是否是最後一次遍歷。
  • forloop.parentloop :如果有多個迴圈巢狀,那麼這個屬性代表的是上一級的for迴圈。

3. for...in...empty 標籤:這個標籤使用跟 for...in... 是一樣的,只不過是在遍歷的物件如果沒有元素的情況下,會執行 empty 中的內容。示例程式碼如下:

{% for person in persons %}
    <li>{{ person }}</li>
{% empty %}
    <li>暫時還沒有任何人</li>
{% endfor %}

例項程式碼如下:

views.py:

from django.shortcuts import render

# Create your views here.
# my_dict = {"name": 'tom'}
# my_list = ["jerry",]
# my_tupe = ("alice",)
my_dict = {'books':[
                    {"name":'紅樓夢','author':'曹雪芹',"price":150},
                    {"name":'水滸傳','author':'羅貫中',"price":140},
                    {"name":'三國演義','author':'施耐庵',"price":160},
                    {"name":'西遊記','author':'吳承恩',"price":130},
                    ],
            # "comment": ['內容不錯', "真的假的啊"],
            "comment": [],
           }

def index(request):
    return render(request, 'index.html', context=my_dict)
    # return render(request, 'index.html', context={'age': 20})
    # return render(request, 'index.html', context={'username': "jack_cheng",
    #                                               'list1':my_dict,
    #                                               'list2':my_list,
    #                                               'list3':my_tupe})

url.py:

from django.contrib import admin
from django.urls import path
from front import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('front/', views.index),
]

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{#<p>字串:{{ username }}</p>#}
{#<p>字典:{{ list1.name }}</p>#}
{#<p>列表:{{ list2.0 }}</p>#}
{#<p>元組:{{ list3.0 }}</p>#}
{#{% if age < 18 %}#}
{#    <p>您是未成年人</p>#}
{#{% elif age >= 18 and age < 80 %}#}
{#    <p>您是成年人</p>#}
{#{% else %}#}
{#    <p>您是老年人</p>#}
{#{% endif %}#}
<table>
    <thead>
        <tr>
            <td>序號</td>
            <td>作者</td>
            <td>書名</td>
            <td>價格</td>
        </tr>
    </thead>
    <tbody>
    {% for book in books  %}
        {% if forloop.first %}
            <tr style="background: red;">
        {% elif forloop.last %}
            <tr style="background: pink">
        {% else %}
            <tr>
        {% endif %}
            <td>{{ forloop.counter }}</td>
            <td>{{ book.name }}</td>
            <td>{{ book.author }}</td>
            <td>{{ book.price }}</td>
        </tr>
    {% endfor %}

    </tbody>
</table>

{% for item in comment %}
    <li>{{ item }}</li>
{% empty %}
    <li>抱歉內容為空</li>
{% endfor %}

</body>
</html>