2010-09-14 166 views
30

假設我有一個'get_item'視圖,如何爲以下php樣式的URL編寫URL模式?Django和查詢字符串參數

http://example.com/get_item/?id=2&type=foo&color=bar 

(我沒有使用標準的「好」類型的URL即:http://example.com/get_item/2/foo/bar,因爲它是不實際的)

具體來說,我怎麼做我使視圖響應當用戶鍵入上述在瀏覽器中,我如何收集參數並在我的視圖中使用它?

我試圖至少得到id部分權利,但無濟於事。當我在瀏覽器中輸入該視圖將不會運行http://example.com/get_item?id=2

我的網址模式:

(r'^get_item/id(?P<id>\d+)$', get_item) 

我的觀點:

def get_item(request): 
    id = request.GET.get('id', None) 
    xxxxxx 

總之,我該如何實現URL的PHP​​的風格模式與Django的查詢字符串參數?

+0

如何更好的URL get_item/2/foo/bar,並匹配?所以我們可以有get_item/2 /褲子/紅色。 – dotty 2010-09-16 11:32:21

回答

17

你只需要你的URL模式更改爲:

(r'^get_item/$', get_item) 

而且您的視圖代碼將工作。在Django中,url模式匹配用於實際路徑而不是查詢字符串。

45

讓你的模式是這樣的:

(r'^get_item/$', get_item) 

而在你的看法:

def get_item(request): 
    id = int(request.GET.get('id')) 
    type = request.GET.get('type', 'default') 

雖然正常的詳細視圖等,你應該把ID /塞在URL中,而不是在請求參數!使用get參數例如。過濾列表視圖,確定當前頁面等...

+3

感謝您的答案。我現在明白了。無需使用re來滿足urls.py中的參數。只需使用request.Get.get()收集視圖中的參數 – Ben 2010-09-15 04:33:53