改進(jìn)Django中的表單的簡單方法
首先,search()視圖對于空字符串的處理相當(dāng)薄弱——僅顯示一條”Please submit a search term.”的提示信息。 若用戶要重新填寫表單必須自行點擊“后退”按鈕, 這種做法既糟糕又不專業(yè)。如果在現(xiàn)實的案例中,我們這樣子編寫,那么Django的優(yōu)勢將蕩然無存。
在檢測到空字符串時更好的解決方法是重新顯示表單,并在表單上面給出錯誤提示以便用戶立刻重新填寫。 最簡單的實現(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)來以便查看)
這段代碼里,我們改進(jìn)來search()視圖:在字符串為空時重新顯示search_form.html。 并且給這個模板傳遞了一個變量error,記錄著錯誤提示信息。 現(xiàn)在我們編輯一下search_form.html,檢測變量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()視圖所使用的模板,因為search_form()視圖沒有傳遞error變量,所以在條用search_form視圖時不會顯示錯誤信息。
通過上面的一些修改,現(xiàn)在程序變的好多了,但是現(xiàn)在出現(xiàn)一個問題: 是否有必要專門編寫search_form()來顯示表單? 按實際情況來說,當(dāng)一個請求發(fā)送至/search/(未包含GET的數(shù)據(jù))后將會顯示一個空的表單(帶有錯誤信息)。 所以,只要我們改變search()視圖:當(dāng)用戶訪問/search/并未提交任何數(shù)據(jù)時就隱藏錯誤信息,這樣就移去search_form()視圖以及對應(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)后的視圖中,若用戶訪問/search/并且沒有帶有GET數(shù)據(jù),那么他將看到一個沒有錯誤信息的表單; 如果用戶提交了一個空表單,那么它將看到錯誤提示信息,還有表單; 最后,若用戶提交了一個非空的值,那么他將看到搜索結(jié)果。
最后,我們再稍微改進(jìn)一下這個表單,去掉冗余的部分。 既然已經(jīng)將兩個視圖與URLs合并起來,/search/視圖管理著表單的顯示以及結(jié)果的顯示,那么在search_form.html里表單的action值就沒有必要硬編碼的指定URL。 原先的代碼是這樣:
<form action="/search/" method="get">
現(xiàn)在改成這樣:
<form action="" method="get">
action=”“意味著表單將提交給與當(dāng)前頁面相同的URL。 這樣修改之后,如果search()視圖不指向其它頁面的話,你將不必再修改action。
相關(guān)文章
Python實現(xiàn)的查詢mysql數(shù)據(jù)庫并通過郵件發(fā)送信息功能
這篇文章主要介紹了Python實現(xiàn)的查詢mysql數(shù)據(jù)庫并通過郵件發(fā)送信息功能,可實現(xiàn)Python針對mysql的查詢與宕機(jī)信息通過郵件發(fā)送的相關(guān)操作技巧,需要的朋友可以參考下2018-05-05
Python實現(xiàn)批量備份交換機(jī)配置+自動巡檢
這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)批量備份交換機(jī)配置+自動巡檢的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
Python簡單實現(xiàn)自動刪除目錄下空文件夾的方法
這篇文章主要介紹了Python簡單實現(xiàn)自動刪除目錄下空文件夾的方法,涉及Python針對文件與目錄的讀取、判斷、刪除等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08

