国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

改進Django中的表單的簡單方法

2020-01-04 18:02:45
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了改進Django中的表單的簡單方法,Django是Python重多人氣框架中最著名的一個,需要的朋友可以參考下

首先,search()視圖對于空字符串的處理相當薄弱——僅顯示一條”Please submit a search term.”的提示信息。 若用戶要重新填寫表單必須自行點擊“后退”按鈕, 這種做法既糟糕又不專業。如果在現實的案例中,我們這樣子編寫,那么Django的優勢將蕩然無存。

在檢測到空字符串時更好的解決方法是重新顯示表單,并在表單上面給出錯誤提示以便用戶立刻重新填寫。 最簡單的實現方法既是添加else分句重新顯示表單,代碼如下:

 

 
  1. from django.http import HttpResponse 
  2. from django.shortcuts import render_to_response 
  3. from mysite.books.models import Book 
  4.  
  5. def search_form(request): 
  6. return render_to_response('search_form.html'
  7.  
  8. def search(request): 
  9. if 'q' in request.GET and request.GET['q']: 
  10. q = request.GET['q'
  11. books = Book.objects.filter(title__icontains=q) 
  12. return render_to_response('search_results.html'
  13. {'books': books, 'query': q}) 
  14. else
  15. **return render_to_response('search_form.html', {'error': True})** 

(注意,將search_form()視圖也包含進來以便查看)

這段代碼里,我們改進來search()視圖:在字符串為空時重新顯示search_form.html。 并且給這個模板傳遞了一個變量error,記錄著錯誤提示信息。 現在我們編輯一下search_form.html,檢測變量error:

 

 
  1. <html> 
  2. <head> 
  3. <title>Search</title> 
  4. </head> 
  5. <body> 
  6. **{% if error %}** 
  7. **<p style="color: red;">Please submit a search term.</p>** 
  8. **{% endif %}** 
  9. <form action="/search/" method="get"
  10. <input type="text" name="q"
  11. <input type="submit" value="Search"
  12. </form> 
  13. </body> 
  14. </html> 

我們修改了search_form()視圖所使用的模板,因為search_form()視圖沒有傳遞error變量,所以在條用search_form視圖時不會顯示錯誤信息。

通過上面的一些修改,現在程序變的好多了,但是現在出現一個問題: 是否有必要專門編寫search_form()來顯示表單? 按實際情況來說,當一個請求發送至/search/(未包含GET的數據)后將會顯示一個空的表單(帶有錯誤信息)。 所以,只要我們改變search()視圖:當用戶訪問/search/并未提交任何數據時就隱藏錯誤信息,這樣就移去search_form()視圖以及對應的URLpattern。

  1. def search(request): 
  2. error = False 
  3. if 'q' in request.GET: 
  4. q = request.GET['q'
  5. if not q: 
  6. error = True 
  7. else
  8. books = Book.objects.filter(title__icontains=q) 
  9. return render_to_response('search_results.html'
  10. {'books': books, 'query': q}) 
  11. return render_to_response('search_form.html'
  12. {'error': error}) 


在改進后的視圖中,若用戶訪問/search/并且沒有帶有GET數據,那么他將看到一個沒有錯誤信息的表單; 如果用戶提交了一個空表單,那么它將看到錯誤提示信息,還有表單; 最后,若用戶提交了一個非空的值,那么他將看到搜索結果。

最后,我們再稍微改進一下這個表單,去掉冗余的部分。 既然已經將兩個視圖與URLs合并起來,/search/視圖管理著表單的顯示以及結果的顯示,那么在search_form.html里表單的action值就沒有必要硬編碼的指定URL。 原先的代碼是這樣:

  1. <form action="/search/" method="get"


現在改成這樣:

  1. <form action="" method="get"


action=”“意味著表單將提交給與當前頁面相同的URL。 這樣修改之后,如果search()視圖不指向其它頁面的話,你將不必再修改action。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 囊谦县| 衡阳市| 浦县| 志丹县| 砚山县| 九龙城区| 浑源县| 武汉市| 莱州市| 罗源县| 凤山市| 荆门市| 突泉县| 海南省| 临沭县| 安西县| 阜南县| 河曲县| 巩留县| 明水县| 昭平县| 海南省| 齐河县| 绥滨县| 林口县| 南昌县| 山东省| 克山县| 琼结县| 衡阳县| 平山县| 伽师县| 龙岩市| 渝中区| 石楼县| 南开区| 丹寨县| 会昌县| 辽中县| 略阳县| 砚山县|