基于Django类的视图的反向URL

时间:2011-12-21 18:32:31

标签: django django-views django-urls django-class-based-views

我正在尝试做类似的事情:

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

但这似乎不起作用。我得到了 使用参数'()'和关键字参数“{'pk':13240L,'foo':'bar}'找不到”video_detail“。

然而,这确实有效:

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

即。从反向调用中移除foo:bar。这样做的正确方法是什么,并在反向URL中传递额外的参数?

1 个答案:

答案 0 :(得分:8)

reverse是一个创建URL的函数。

由于您在网址格式中仅指定了pk模式,因此您只能使用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')