带有int参数的Django HttpResponseRedirect

时间:2012-05-28 13:00:34

标签: python django django-views django-urls

我想将一个int参数(user_id)从登录视图传递到另一个视图。这可能在HttpResponseRedirect范围内吗?我尝试这样的事情:

return HttpResponseRedirect("/profile/?user_id=user.id")

虽然我的urlconf是:

(r'^profile/(?P<user_id>\d+)/$', '...')

但我不知道这是不是正确的方法。有什么建议吗?

3 个答案:

答案 0 :(得分:4)

嗯,这显然不是正确的方法,因为您创建的网址与您的网址中的网址不匹配。

这样做的正确方法是依靠Django为您完成。如果您为URL定义命名:

urlpatterns += patterns('', 
    url(r'^profile/(?P\d+)/$', ' ...', name='profile'),
)

然后您可以使用django.core.urlresolvers.reverse使用您的参数生成该URL:

redirect_url = reverse('profile', args=[user.id])
return HttpResponseRedirect(redirect_url)

请注意,在您的网址中使用kwargs而不是args会更好,但我保留了原来的效果。

答案 1 :(得分:3)

最后,我将上述答案结合起来:

url = reverse('profile', kwargs={ 'user_id': user.id })
return HttpResponseRedirect(url)

url(r'^profile/(?P<user_id>\d+)/$', '...', name='profile')

它完美无缺。

谢谢你!

答案 2 :(得分:1)

这是可能的,但最好反转URL然后重定向到它:

url = reverse('name_of_url', kwargs={ 'user_id': user.id })
return HttpResponseRedirect(url)

你应该确保你的URL conf中有一个命名参数(在上面的例子中,它是一个名为user_id的参数。