2010-09-14 42 views
30

Suponiendo que tengo una vista 'get_item', ¿cómo escribo el patrón de URL para el siguiente estilo de URL php?Django y parámetros de cadena de consulta

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

(no estoy utilizando el tipo estándar 'agradable' de decir URL: http://example.com/get_item/2/foo/bar como que no es práctico)

Concretamente, ¿cómo puedo hacer que ponga el punto de vista responde cuando el usuario escribe la anterior en un navegador, y ¿cómo puedo recopilar los parámetros y usarlos en mi opinión?

Intenté al menos obtener la parte correcta pero fue en vano. La vista no se ejecutará cuando escribo esto en mi navegador http://example.com/get_item?id=2

Mi patrón de URL:

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

Mi opinión:

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

En pocas palabras, ¿Cómo implemento estilo de url de PHP patrón con parámetros de cadena de consulta en django?

+0

¿qué tal una mejor URL get_item/2/foo/bar, y coincide con eso? Entonces podríamos tener get_item/2/pants/red. – dotty

Respuesta

17

sólo tiene que cambiar su patrón de URL:

(r'^get_item/$', get_item) 

Y el código de la vista va a funcionar. En Django, la coincidencia de patrón de URL se utiliza para la ruta real, no para la cadena de consulta.

45

Haga su patrón de esta manera:

(r'^get_item/$', get_item) 

Y en su opinión:

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

Aunque para las vistas normales detalle etc. usted debe poner el id/babosa en la url y no en el cadena de consulta! Use los parámetros get, p. Ej. para filtrar una vista de lista, para determinar la página actual, etc. ...

+3

Gracias por las respuestas. Ahora lo entiendo. No es necesario utilizar re para satisfacer los parámetros en urls.py. Solo recoge los parámetros en las vistas usando request.Get.get() – Ben

Cuestiones relacionadas