5

sto cercando di fare qualcosa di simile:invertire gli URL per la vista basato classe Django

in urls.py:

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

in views.py

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

Ma questo doesn' t sembra funzionare. Ottengo un inverso per 'video_detail' con argomenti '()' e argomenti parola chiave '{' pk ': 13240L,' foo ':' bar} 'non trovato.

Tuttavia questo lavoro:

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

es. rimozione di foo: bar dalla chiamata inversa. Qual è il modo corretto per farlo e passare argomenti aggiuntivi nell'URL inverso?

risposta

8

reverse è una funzione che crea URL.

perché avete specificato solo pk modello nei tuoi modelli di URL, è possibile utilizzare solo pk come argomento di reverse (in realtà non avrebbe senso aggiungere foo in quanto l'url generato sarebbe esattamente lo stesso per qualsiasi valore foo). È possibile aggiungere foo a URL modello o creare più URL con nome, vale a dire:

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')