5

Я пытаюсь сделать что-то вроде:обратного адреса на основе зрения класса Django

в urls.py:

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

в views.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?

ответ

8

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

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

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

или

url(r'^(?P<pk>\d+)/(?P<foo>\w+)/$', VideoDetailView.as_view(), name='video_detail') 
Смежные вопросы