5

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

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

虽然我的 urlconf 是:

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

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

4

3 回答 3

4

好吧,这显然不是正确的方法,因为您创建的 URL 与 urlconf 中的不匹配。

这样做的正确方法是依靠 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)

请注意,在您的 URL 中使用 kwargs 而不是 args 更好,但我保留了它原来的样子。

于 2012-05-28T13:05:31.787 回答
3

最后,我通过执行以下操作结合了上述答案:

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

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

它工作得很好。

谢谢你!

于 2012-05-28T22:43:32.703 回答
1

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

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

您应该确保您的 URL conf 中有一个命名参数(在我上面的示例中,它是一个名为user_id.

于 2012-05-28T13:04:27.147 回答