обратные URL-адреса для представления на основе класса Django

Я пытаюсь сделать что-то вроде:

в urls.py:

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

в представлениях.py

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

Но это, кажется, не работает. Я получаю реверс для 'video_detail' с аргументами '()' и аргументами ключевого слова '{'pk': 13240L, 'foo': 'bar}' не найден.

Однако это работает:

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

т.е. удаление foo: bar из обратного вызова. Как правильно это сделать и передать дополнительные аргументы в обратном URL-адресе?


person 9-bits    schedule 21.12.2011    source источник


Ответы (1)


reverse — это функция, которая создает URL.

Поскольку вы указали только шаблон pk в своих шаблонах URL, вы можете использовать только pk в качестве аргумента для reverse (на самом деле не имеет смысла добавлять foo, поскольку сгенерированный URL будет точно таким же для любого значения foo). Вы можете добавить foo к шаблону URL-адреса или создать несколько именованных URL-адресов, например:

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

or

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