2012-01-20 18 views
1

私はallauthを使って私のdjangoサイトに登録とログインを提供しています。他のすべては、ログイン後にその人を現在のページにリダイレクトするのに問題がある以外、うまく動作しているようです。それはdjangoの変数{{next}}を使用してログインした後にGETパラメータを持つページにリダイレクトする方法

/questions/?company=google 

このページでは、会社のGoogleのための質問のリストが含まれているようなものだが、その答えに、人のニーズを表示するため

私はいくつかのインタビューの質問と一般的なURLを持つページを持っていますログインします。回答はドロップダウンボックスに表示されます。ユーザがログインをクリックしたときしかし

/login/?next=/questions/ 

次のそして、私の実際のページで実際にあったGETパラメータがあるため、私のURLで&で送信されないよう要求がloginページに送信されます。どうすればこの問題を解決できますか?その人がログインしようとした場所から別のページにリダイレクトされているのはうれしくありません。

私はGET変数としてnextパラメータを送信して知っては解決策ではありませんが、私は、テンプレートからPOST変数としてredirect linkを送ることができる方法があります。

私は質問リストを表示する私の意見で別のものを試しました。現在のリンクのURLを含むセッション変数を設定します。ユーザーがログインをクリックすると、ログインビューでこの特定のセッション変数がチェックされます。設定されている場合、私はそのページにリダイレクトします。

ログインビューでセッション変数が受信されないのはわかりませんが、ユーザーがログインビューに移動したときにセッションがリセットされたと思います。

ご迷惑をおかけして申し訳ございません。

答えて

1

この場合、URLパラメータをエンコードする必要があります。あなたは/questions/?company=googleのような変数を送ろうとしますが、?のように、=の文字は特別なものです。 URLに埋め込まれると、特別な意味を持ちます。 URLエンコーディングを使用する変数encodeは、%2Fquestions%2F%3Fcompany%3Dgoogleになります。パラメータをnextに割り当てると、URLは/login/?next=%2Fquestions%2F%3Fcompany%3Dgoogleになります。これは、ログイン時に正しい場所にリダイレクトする必要があります。

2

は、あなたが(docsを参照)。これは、すべてのクエリで正しいパスを返します

next = request.get_full_path() 

を試してみましたが、あなたはその後、例えば、URLをリダイレクトするには、GET PARAMとしてそれを渡すことができます

full_path = request.get_full_path() 
return HttpResponseRedirect('%s?next=%s' % (reverse('login'), full_path)) 
+0

ソリューションのおかげで、私は、テンプレートではなくビューでこれをやってみたかったです。ビュー内ではよりシンプルでしたが、下の解決策はトリックでした – Sachin

関連する問題