私は Django を初めて使用し、django girls tutorialの終わりに近づいています。ビュー (特定の投稿をクリックするためのビュー) の post_detail の上に「@login_required」を追加し、login.html テンプレートを追加しました。したがって、投稿のタイトルをクリックすると、ログイン ページにリダイレクトされます (これまでのところ、非常に良好です)。URL はhttp://127.0.0.1:8000/accounts/login/?next=/post/11/ (私のコンピューターの ATM でこれを試してみてください。)
次に、管理者名/パスワードを入力すると、自動的にhttp://127.0.0.1:8000/accounts/profile/にリダイレクトされ、もちろん「ページが見つかりません (404)」が表示されます (url/view/ がないため)。そのためのテンプレート)。「ああ、/post/11/ にリダイレクトされたかっただけだ」と思いました。
スタックオーバーフローを調べたところ、次の質問が見つかりました:
サインインすると、Django で "/accounts/profile/" につながる(ほぼ正しいように聞こえます)
と答えが得られました
settings.py の LOGIN_REDIRECT_URL の値を変更します。
そこで、Django のドキュメントで LOGIN_REDIRECT_URL を調べました。
デフォルト: '/accounts/profile/'
contrib.auth.login ビューが次のパラメータを取得しない場合に、ログイン後にリクエストがリダイレクトされる URL 。
これは、たとえば login_required() デコレーターによって使用されます。
この設定は、2 つの場所 (設定と URLconf) で URL を定義する必要がないため、構成の重複を減らすために使用できる名前付き URL パターンも受け入れます。
バージョン 1.8 で非推奨: 設定は、ビュー関数へのドット付き Python パスの場合もあります。このサポートは、Django 1.10 で削除されます。
しかし、私の contrib.auth.login は次のパラメーターを取得しませんか? (最後に "?next=/post/11/" と書かれている私の URL を見てください) ここで私を助けてください。
ページは
http://finbel.pythonanywhere.com/
で、ソース コードは
https://github.com/Finbel/my-first-blogで見ることができます。
更新 (1):
これで、LOGIN_REDIRECT_URL が次にどこに到達するかを決定するものであることがわかりました。これは、URL の next-parameter を無視することを意味する必要があります。問題についてさらにグーグルで検索したところ、私の問題と非常によく似たこの質問が見つかりました。
ドキュメントには、「次の」パラメータとコンテキスト プロセッサを使用する必要があると記載されています。テンプレートに {{next}} がありますが、「/gallery/(username)」を実際に渡す方法がわかりません。どんな助けでも大歓迎です。
(テンプレートに {{next}} すらありません。どこにどのように追加すればよいですか?)
その質問に対する好ましい答えは次のように思われました。
Django のログイン ビュー django.contrib.auth.views.login は、extra_context という名前の辞書を受け入れます。ディクショナリの値はテンプレートに直接渡されます。したがって、それを使用して次のパラメーターを設定できます。それが完了したら、名前が next で値が {{ next }} の非表示フィールドを設定して、テンプレートでレンダリングされるようにすることができます。
しかし、私はこれをどのように解釈するかわかりません。この編集を書いているときに、この投稿 (kacperd による) で回答を得たので、今から読みます)