5

que estoy tratando de hacer algo como:revertir las direcciones URL de vista basado en la clase Django

en urls.py:

... 
url(r'^(?P<pk>\d+)/$', VideoDetailView.as_view(), name='video_detail', kwargs={'foo:''}) 
... 

en views.py

.. 
HttpResponseRedirect(reverse('video_detail', kwargs={'pk': id, 'foo':'bar'})) 
... 

Pero este doesn' parece que funciona Obtengo un Reverso para 'video_detail' con argumentos '()' y argumentos de palabras clave '{' pk ': 13240L,' foo ':' barra} 'no encontrado.

Sin embargo, esto hace el trabajo:

.... 
HttpResponseRedirect(reverse('video_detail', kwargs={'pk': id})) 
... 

es decir. eliminando foo: bar de la llamada inversa. ¿Cuál es la forma correcta de hacer esto y pasar argumentos adicionales en la URL inversa?

Respuesta

8

reverse es una función que crea URL.

Debido Ha especificado solamente pk patrón en sus patrones de URL, sólo se puede utilizar pk como argumento para reverse (que realmente no tendría sentido para añadir foo desde la URL generada sería exactamente el mismo para cualquier valor foo). Puede añadir foo a URL patrón o crear varias direcciones URL con nombre, es decir:

url(r'^(?P<pk>\d+)/$', VideoDetailView.as_view(), name='video_detail', kwargs={'foo':''}) 
url(r'^(?P<pk>\d+)/$', VideoDetailView.as_view(), name='video_detail2', kwargs={'foo':'bar'}) 

o

url(r'^(?P<pk>\d+)/(?P<foo>\w+)/$', VideoDetailView.as_view(), name='video_detail') 
Cuestiones relacionadas