我正在尝试做类似的事情:
在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中传递额外的参数?
答案 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')