改進(jìn)Django中的表單的簡(jiǎn)單方法
首先,search()視圖對(duì)于空字符串的處理相當(dāng)薄弱——僅顯示一條”P(pán)lease submit a search term.”的提示信息。 若用戶要重新填寫(xiě)表單必須自行點(diǎn)擊“后退”按鈕, 這種做法既糟糕又不專業(yè)。如果在現(xiàn)實(shí)的案例中,我們這樣子編寫(xiě),那么Django的優(yōu)勢(shì)將蕩然無(wú)存。
在檢測(cè)到空字符串時(shí)更好的解決方法是重新顯示表單,并在表單上面給出錯(cuò)誤提示以便用戶立刻重新填寫(xiě)。 最簡(jiǎn)單的實(shí)現(xiàn)方法既是添加else分句重新顯示表單,代碼如下:
from django.http import HttpResponse
from django.shortcuts import render_to_response
from mysite.books.models import Book
def search_form(request):
return render_to_response('search_form.html')
def search(request):
if 'q' in request.GET and request.GET['q']:
q = request.GET['q']
books = Book.objects.filter(title__icontains=q)
return render_to_response('search_results.html',
{'books': books, 'query': q})
else:
**return render_to_response('search_form.html', {'error': True})**
(注意,將search_form()視圖也包含進(jìn)來(lái)以便查看)
這段代碼里,我們改進(jìn)來(lái)search()視圖:在字符串為空時(shí)重新顯示search_form.html。 并且給這個(gè)模板傳遞了一個(gè)變量error,記錄著錯(cuò)誤提示信息。 現(xiàn)在我們編輯一下search_form.html,檢測(cè)變量error:
<html>
<head>
<title>Search</title>
</head>
<body>
**{% if error %}**
**<p style="color: red;">Please submit a search term.</p>**
**{% endif %}**
<form action="/search/" method="get">
<input type="text" name="q">
<input type="submit" value="Search">
</form>
</body>
</html>
我們修改了search_form()視圖所使用的模板,因?yàn)閟earch_form()視圖沒(méi)有傳遞error變量,所以在條用search_form視圖時(shí)不會(huì)顯示錯(cuò)誤信息。
通過(guò)上面的一些修改,現(xiàn)在程序變的好多了,但是現(xiàn)在出現(xiàn)一個(gè)問(wèn)題: 是否有必要專門(mén)編寫(xiě)search_form()來(lái)顯示表單? 按實(shí)際情況來(lái)說(shuō),當(dāng)一個(gè)請(qǐng)求發(fā)送至/search/(未包含GET的數(shù)據(jù))后將會(huì)顯示一個(gè)空的表單(帶有錯(cuò)誤信息)。 所以,只要我們改變search()視圖:當(dāng)用戶訪問(wèn)/search/并未提交任何數(shù)據(jù)時(shí)就隱藏錯(cuò)誤信息,這樣就移去search_form()視圖以及對(duì)應(yīng)的URLpattern。
def search(request):
error = False
if 'q' in request.GET:
q = request.GET['q']
if not q:
error = True
else:
books = Book.objects.filter(title__icontains=q)
return render_to_response('search_results.html',
{'books': books, 'query': q})
return render_to_response('search_form.html',
{'error': error})
在改進(jìn)后的視圖中,若用戶訪問(wèn)/search/并且沒(méi)有帶有GET數(shù)據(jù),那么他將看到一個(gè)沒(méi)有錯(cuò)誤信息的表單; 如果用戶提交了一個(gè)空表單,那么它將看到錯(cuò)誤提示信息,還有表單; 最后,若用戶提交了一個(gè)非空的值,那么他將看到搜索結(jié)果。
最后,我們?cè)偕晕⒏倪M(jìn)一下這個(gè)表單,去掉冗余的部分。 既然已經(jīng)將兩個(gè)視圖與URLs合并起來(lái),/search/視圖管理著表單的顯示以及結(jié)果的顯示,那么在search_form.html里表單的action值就沒(méi)有必要硬編碼的指定URL。 原先的代碼是這樣:
<form action="/search/" method="get">
現(xiàn)在改成這樣:
<form action="" method="get">
action=”“意味著表單將提交給與當(dāng)前頁(yè)面相同的URL。 這樣修改之后,如果search()視圖不指向其它頁(yè)面的話,你將不必再修改action。
- Python的Django框架中的表單處理示例
- python Django框架實(shí)現(xiàn)自定義表單提交
- 簡(jiǎn)單解析Django框架中的表單驗(yàn)證
- Python中Django 后臺(tái)自定義表單控件
- django表單實(shí)現(xiàn)下拉框的示例講解
- django1.8使用表單上傳文件的實(shí)現(xiàn)方法
- Django forms表單 select下拉框的傳值實(shí)例
- django做form表單的數(shù)據(jù)驗(yàn)證過(guò)程詳解
- Django實(shí)現(xiàn)表單驗(yàn)證
- Django框架表單操作實(shí)例分析
相關(guān)文章
python虛擬環(huán)境的安裝和配置(virtualenv,virtualenvwrapper)
這篇文章主要介紹了python虛擬環(huán)境的安裝和配置(virtualenv,virtualenvwrapper),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Python使用TextRank算法實(shí)現(xiàn)文獻(xiàn)關(guān)鍵信息提取
?TextRank算法是一種基于圖的排序算法,主要用于文本處理中的關(guān)鍵詞提取和文本摘要,下面我們就來(lái)看看如何使用?TextRank算法實(shí)現(xiàn)文獻(xiàn)關(guān)鍵信息提取吧2025-03-03
python實(shí)時(shí)監(jiān)控cpu小工具
這篇文章主要為大家詳細(xì)介紹了python實(shí)時(shí)監(jiān)控cpu的小工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
pytorch中的matmul與mm,bmm區(qū)別說(shuō)明
這篇文章主要介紹了pytorch中的matmul與mm,bmm區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
python3.6數(shù)獨(dú)問(wèn)題的解決
這篇文章主要為大家詳細(xì)介紹了python3.6數(shù)獨(dú)問(wèn)題的解決,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Python?hashlib模塊與哈希算法保護(hù)數(shù)據(jù)完整性教程
hashlib模塊為Python提供了一種簡(jiǎn)便的方式來(lái)使用各種哈希算法,如MD5、SHA-1、SHA-256等,哈希函數(shù)廣泛用于密碼學(xué)、數(shù)據(jù)完整性驗(yàn)證和安全存儲(chǔ)等領(lǐng)域2024-01-01
基于Python爬蟲(chóng)采集天氣網(wǎng)實(shí)時(shí)信息
這篇文章主要介紹了基于Python爬蟲(chóng)采集天氣網(wǎng)實(shí)時(shí)信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06

