2014-07-03 57 views
0

我是Django的新手,並且無法理解URL模式。當用戶訪問我網站的索引頁面(http://www.example.com)時,他們有能力進行搜索。他們在一個框中輸入名字,在另一個框中輸入姓氏,然後單擊搜索按鈕。用戶的搜索返回結果頁面上的信息(http://www.example.com/results)。一切都完美的作品時,我用下面的模式:構造Django URL模式

urlpatterns = patterns('', 
... 
url(r'^results',views.results, name='results'), 
... 
) 

然而,而不是撕心裂肺一個「/結果」網址在每一次搜索的,我怎麼會呈現這樣的URL,捕捉實際查詢:

http://www.example.com/results/<first_name>'+'<last_name>/ 

'first_name'和'last_name'是存儲在視圖中的request.session []變量。我相信這是一個非常簡單的問題,但鑑於我對這一切都很陌生,我希望有人能夠幫助我理解它的工作原理。

我很感激幫助。

+0

通常,搜索參數通過查詢字符串傳遞:'http://www.example.com/results/?first_name = john&last_name = doe',然後您可以使用'request.GET'在您的視圖中訪問它們。所以不需要指定另一個url。 – Germano

+0

當然,這是有效的。那麼,我可以做什麼來顯示url的完整路徑而不是'/ results'?我想這不是一個大問題,但視覺效果很好。 – datasci

+0

如果始終提供了first_name和last_name,則可以將它們用作url參數url(r'^ results /(?P \ w + /(?P \ w +))',views.results,name ='results') , – Alvaro

回答

0

通過在你的url模式中命名組。當然,如果你只是連接first_name和last_name,這很複雜,因爲你不知道如何區分哪個是人。你應該串連這樣first_name+"/"+last_name,然後你的URL模式應該是這樣的:

 
url(r'^results/(?P<first_name>[\w-]+)/(?P<last_name>[\w-]+)$',views.results, name='results'), 

然後,你的結果來看,應該接受兩個參數:

def results(request, first_name, last_name):

希望你所熟悉的正則表達式。而且,如果first_name和last_name不正確(即無效,奇數值等),則需要控制自己。

+0

我收到一條錯誤消息,說我要求'http://www.example.com/results',並且沒有任何網址格式匹配。在這個解決方案中,我是否需要調整我的HttpResponse以請求相同的正則表達式?目前,我的模板位於'results.html',這正是我在HttpResponse中請求的內容。 – datasci

+0

這是因爲您不必請求此網址。您必須請求example.com/results/first_name/last_name。此請求會調用您的視圖,您的視圖會將數據傳遞給您的模板以進行呈現。 – argaen

0

感謝您的所有建議!正則表達式非常強大;我需要花幾個星期來更仔細地學習它。使用你的建議,我是能夠得到它使用的工作如下:

urls.py

url(r'^results/(?P<first_name>\w)+(?P<last_name>\w)',views.results, name='results') 
... 

views.py

def search(request): 
... 
return HttpResponseRedirect('results/' + first_name + '+' + last_name) 

def results(request,first_name,last_name): 
... 

再次感謝!