2012-05-28 19 views
5

ログインビューからint型パラメータ(user_id)を別のビューに渡したいとします。それはHttpResponseRedirect内で可能ですか?私のURLconfですがint型パラメータ付きDjango HttpResponseRedirect

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

:私はこのような何かをしようと

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

しかし、それは正しいやり方だ場合、私は知りません。助言がありますか?可能ですが、それはURLを逆にし、それにリダイレクトする方が良いでしょう

+0

私は 'login'ビュー([docs](https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login)の' next'引数を使うことができると思います。 ))。それは最もシンプルになります。 – DrTyrsa

答えて

4

作成したURLは、あなたのURLconfに1と一致しないため、まあ、それは、明らかに正しい方法ではありません。これを行うには

正しい方法はあなたのためにそれを行うにはDjangoに依存することです。あなたのURL定義に名前:

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

は、あなたがあなたの引数を指定して、そのURLを生成するためにdjango.core.urlresolvers.reverseを使用することができます:それはあなたのURLにkwargsからではなく、引数を使用することをお勧めします

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

注意を、私はあなたのようにそれを守ってきました元々あった。

1

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

あなたのURL confにはそれに名前付きパラメータを持っていることを確認する必要があります(私の上記の例では、それはと呼ばれるパラメータですuser_id

3

は最後に、私が行うことによって、上記の回答を組み合わせる:

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

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

をし、それが完全に働きました。

ありがとうございました!