html 列表循环_python web开发:内置标签与过滤器/循环/条件判断
這一篇教程,我們繼續(xù)了解Django中模板的使用。
主要內(nèi)容如下:
- 內(nèi)置標(biāo)簽和過(guò)濾器;
- 模板中使用循環(huán);
- 模板中添加條件判斷。
一、內(nèi)置標(biāo)簽和過(guò)濾器
Django中有很多的內(nèi)置標(biāo)簽,例如之前已經(jīng)使用的block和extends。
過(guò)濾器實(shí)際上就是一些函數(shù),幫助我們進(jìn)行數(shù)據(jù)的處理。
我們可以通過(guò)管道符“|”使用過(guò)濾器,格式為“{{ 變量|過(guò)濾器1|過(guò)濾器2 }}”。
我們來(lái)做個(gè)練習(xí),試用幾個(gè)過(guò)濾器。
首先,我們?cè)谝晥D中先添加一個(gè)視圖函數(shù)。
在視圖函數(shù)中,我們添加兩項(xiàng)數(shù)據(jù)和頁(yè)面內(nèi)容進(jìn)行整合。
示例代碼:
def fiter_test(request): return render(request, 'filter.html', {'letters': 'abc', 'number': 1})然后,我們添加URL分發(fā)配置。
示例代碼:
path('filter/', siteviews.fiter_test),最后,我們創(chuàng)建一個(gè)模板文件’filter.html’,在模板文件中我們使用過(guò)濾器對(duì)數(shù)據(jù)進(jìn)行處理。
示例代碼:
過(guò)濾器{{ letters|length }}{{ letters|upper }}
{{ letters|join:',' }}
{{ number|add:1 }}
{{ number|add:-1 }}
在模板代碼中,我們通過(guò)過(guò)濾器對(duì)字符串‘letters’分別進(jìn)行了長(zhǎng)度獲取、轉(zhuǎn)為大寫(xiě)以及逗號(hào)分隔的操作;對(duì)數(shù)字“number”分別進(jìn)行了加1和減1的操作。
頁(yè)面顯示結(jié)果:
二、模板中使用循環(huán)
在一個(gè)模板頁(yè)面中添加單個(gè)數(shù)據(jù)可以通過(guò)“{{ 變量名 }}”的方式來(lái)實(shí)現(xiàn)。
如果需要添加多個(gè)數(shù)據(jù),則可以通過(guò)字典來(lái)實(shí)現(xiàn)。
例如,視圖中向模板頁(yè)面?zhèn)魅氲臄?shù)據(jù)為字典(例如:{‘person’:{‘name’:’小樓’,’sex’:’男’}}),在模板中則可以通過(guò)“{{ person.name }}”和“{{ person.sex}}”獲取到相應(yīng)的數(shù)據(jù)。
但是,如果頁(yè)面中我們需要呈現(xiàn)一個(gè)列表(例如新聞列表),這時(shí)會(huì)有大量的數(shù)據(jù)需要處理,該如何實(shí)現(xiàn)呢?
另外,如果列表中有個(gè)別的項(xiàng)需要處理(例如第一項(xiàng)為紅色字體),如何處理呢?
這些需求的實(shí)現(xiàn),需要在模板中使用循環(huán)和條件判斷。
如果有新聞列表內(nèi)容的話,我們需要能夠在頁(yè)面中呈現(xiàn)出來(lái)。
這就需要在視圖函數(shù)中獲取一個(gè)新聞列表的數(shù)據(jù)內(nèi)容,并在模板中循環(huán)加載出每一個(gè)列表項(xiàng)。
因?yàn)?#xff0c;我們還沒(méi)有接觸過(guò)模型(Model),暫時(shí)還不能和數(shù)據(jù)庫(kù)進(jìn)行關(guān)聯(lián),在這里我們先手動(dòng)寫(xiě)出一個(gè)新聞列表的內(nèi)容數(shù)據(jù)。
1、定義視圖函數(shù)
在之前編寫(xiě)好的視圖函數(shù)中,我們寫(xiě)出一個(gè)新聞列表內(nèi)容,然后整合到模板定義的頁(yè)面內(nèi)容中。
此處只以經(jīng)濟(jì)新聞為例。
示例代碼:
def news_list(request, news_type): news_dict = {'economic': '經(jīng)濟(jì)', 'sport': '體育'} news_titles = [] if news_type == 'economic': news_titles = [('12/5', '作者成為全國(guó)首富。'), ('12/4', '作者成為全省首富。'), ('12/3', '作者成為全市首富。'), ('12/2', '作者成為鎮(zhèn)里首富。'), ('12/1', '作者成為村里首富。')] return render(request, 'news_list.html', {'news_type': news_dict[news_type], 'news_titles': news_titles})2、模板中添加循環(huán)
示例代碼:
{% extends 'base.html' %}{% block title %}{{ news_type }}新聞{% endblock %}{% block content %} {{ news_type }}新聞列表:- {% for date,title in news_titles %}
- {{ title }}({{ date }}) {% endfor %}
注意,模板中的循環(huán)是由“{% for 變量 in 可迭代對(duì)象 %}”和循環(huán)的內(nèi)容以及“{% endfor %}”組成。
當(dāng)我們完成上方代碼之后,訪問(wèn)經(jīng)濟(jì)新聞列表頁(yè)面,就能看到想要的效果了。
三、模板中添加條件判斷
通過(guò)添加循環(huán)的代碼,我們也能夠看出,在模板中添加邏輯代碼其實(shí)非常簡(jiǎn)單,只要了解添加的規(guī)則和能夠使用的功能就可以了。
接下來(lái),我們就嘗試將新聞列表第一項(xiàng)的用紅色字體顯示。
示例代碼:
{% extends 'base.html' %}{% block title %}{{ news_type }}新聞{% endblock %}{% block content %} {{ news_type }}新聞列表:- {% for date,title in news_titles %} {% if forloop.first %}
- {{ title }} ({{ date }}) {% endif %}
- {{ title }}({{ date }}) {% endfor %}
上方代碼中,紅色部分是新增的代碼。
通過(guò)條件判斷,如果是循環(huán)第一項(xiàng)“forloop.first”,將“{{ title }}”的內(nèi)容用“font”標(biāo)簽變?yōu)榧t色字體。
“forloop.first”是循環(huán)的一個(gè)變量,像這樣的變量還有其他幾個(gè)。
在PyCharm中,我們輸入“forloop.”之后,就能夠看到這些變量。
當(dāng)我們寫(xiě)完“if”的語(yǔ)句塊之后,不要忘了在最后添加“{% endif %}”。
不管是“for”還是“if”,在模板中他們都是標(biāo)簽,需要有開(kāi)始標(biāo)簽和結(jié)束標(biāo)簽。
以上是我們對(duì)列表內(nèi)容的一些處理。
不過(guò),有時(shí)列表中沒(méi)有內(nèi)容的話,我們也需要進(jìn)行處理。
在之前的示例中,不管是體育新聞還是經(jīng)濟(jì)新聞,我們都用的同一模板。
體育新聞,我們并沒(méi)有任何列表數(shù)據(jù),這時(shí)需要給用戶一個(gè)提示。
那么,如何判斷數(shù)據(jù)內(nèi)容是空的,并給出相應(yīng)提示呢?
示例代碼:
{% extends 'base.html' %}{% block title %}{{ news_type }}新聞{% endblock %}{% block content %} {{ news_type }}新聞列表:- {% for date,title in news_titles %} {% if forloop.first %}
- {{ title }} ({{ date }}) {% endif %}
- {{ title }}({{ date }}) {% empty %} 抱歉:暫時(shí)沒(méi)有新聞內(nèi)容! {% endfor %}
上方代碼中,紅色代碼是新增部分。
通過(guò)在for循環(huán)中添加“{% empty %}”,就能夠?qū)?shù)據(jù)內(nèi)容為空進(jìn)行判斷,從而給出相應(yīng)提示。
當(dāng)我們完成本篇教程的所有代碼,再次啟動(dòng)開(kāi)發(fā)服務(wù)器,訪問(wèn)經(jīng)濟(jì)新聞列表和體育新聞列表,就能夠看到我們想要的結(jié)果了。
經(jīng)濟(jì)新聞頁(yè)面:
體育新聞頁(yè)面:
總結(jié)
以上是生活随笔為你收集整理的html 列表循环_python web开发:内置标签与过滤器/循环/条件判断的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 简述中断处理的6个步骤_实用!处理电机振
- 下一篇: 管道无损检测python_武汉哪里有便携