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

首頁 > 編程 > Python > 正文

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

2019-11-25 17:10:16
字體:
來源:轉載
供稿:網友

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

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

from django.http import HttpResponsefrom django.shortcuts import render_to_responsefrom mysite.books.models import Bookdef 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()視圖也包含進來以便查看)

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

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

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

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

<form action="/search/" method="get">

現在改成這樣:

<form action="" method="get">

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洞口县| 广汉市| 外汇| 仪陇县| 婺源县| 同德县| 襄城县| 隆昌县| 津市市| 微山县| 岳普湖县| 牡丹江市| 临江市| 英超| 萍乡市| 麻栗坡县| 和顺县| 滁州市| 云龙县| 巨鹿县| 凌海市| 灵宝市| 宝山区| 稷山县| 鹤壁市| 望都县| 肇州县| 肇源县| 伊金霍洛旗| 玉门市| 甘谷县| 那坡县| 赤峰市| 衡阳县| 和平区| 南昌县| 望城县| 邵武市| 珠海市| 即墨市| 密山市|