5

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

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

IE。从反向调用中删除 foo: bar 。执行此操作并在反向 url 中传递额外参数的正确方法是什么?

4

1 回答 1

8

reverse是一个创建 URL 的函数。

因为您pk在 URL 模式中仅指定了模式,所以您只能将pk其用作参数reverse(添加确实没有意义,因为生成的 url 对于任何值foo都是完全相同的)。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')
于 2011-12-21T19:30:15.327 回答