обратные URL-адреса для представления на основе класса Django - PullRequest
5 голосов
/ 21 декабря 2011

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

в 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: бар из обратного вызова.Как правильно сделать это и передать дополнительные аргументы в обратном URL-адресе?

1 Ответ

8 голосов
/ 21 декабря 2011

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

или

url(r'^(?P<pk>\d+)/(?P<foo>\w+)/$', VideoDetailView.as_view(), name='video_detail')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...