5

Próbuję zrobić coś takiego:odwrócić adresy URL widzenia opartego klasy Django

w urls.py:

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

w views.py

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

Ale to nie robi” wydaje się działać. Dostaję odwrotność dla "video_detail" z argumentami "()" i argumentów słów kluczowych "{'pk": 13240L, "foo": "bar}" nie znaleziono.

Jednak to działa:

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

tj. usuwanie foo: bar z połączenia zwrotnego. Jaki jest właściwy sposób, aby to zrobić i przekazać dodatkowe argumenty w odwrotnym adresie URL?

Odpowiedz

8

reverse to funkcja, która tworzy adres URL.

Ponieważ Podano tylko pk wzór w swoich wzorcach adresów URL, można użyć tylko pk jako argument do reverse (to naprawdę nie ma sensu, aby dodać foo ponieważ generowane url byłyby dokładnie takie same dla każdej wartości foo). Możesz dodać foo do URL lub wzorzec tworzenia wielu nazwach adresy URL, to znaczy:

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

lub

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