2010-09-14 21 views
30

Zakładając, że mam widok "get_item", w jaki sposób mogę zapisać wzorzec adresu URL dla następującego stylu adresu URL?Parametry ciągu Django i zapytania

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

(nie używam standardowego „miły” typ URL IE: http://example.com/get_item/2/foo/bar ponieważ nie jest to praktyczne)

W szczególności, w jaki sposób mogę dokonać robię widok reagować, gdy użytkownik wpisze wyżej w przeglądarce i jak mogę zebrać parametry i użyć go w moim widoku?

Próbowałem przynajmniej uzyskać część id, ale bezskutecznie. Widok nie będzie działać, gdy wpisuję to w mojej przeglądarce http://example.com/get_item?id=2

Moje url wzór:

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

Mój pogląd:

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

W skrócie, w jaki sposób zaimplementować styl PHP url wzór z parametrami ciągu zapytania w django?

+0

Co powiesz na ładniejszy URL get_item/2/foo/bar i pasuje do tego? Więc moglibyśmy uzyskać get_item/2/pants/red. – dotty

Odpowiedz

17

Trzeba tylko zmienić swój wzorzec URL do:

(r'^get_item/$', get_item) 

a kod widok będzie działać. W Django dopasowywanie wzorca adresu URL jest używane w rzeczywistej ścieżce, a nie w querystringu.

45

Dokonaj wzór tak:

(r'^get_item/$', get_item) 

A w widoku:

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

jednak dla normalnych widoków szczegółowych itp należy umieścić id/spadu w url, a nie w ciąg zapytania! Użyj parametrów get, np. do filtrowania widoku listy, do określenia bieżącej strony itp.

+3

Dzięki za odpowiedzi. Teraz rozumiem. Nie trzeba używać re, aby obsłużyć parametry w urls.py. Wystarczy zebrać parametry w widokach za pomocą request.Get.get() – Ben

Powiązane problemy