メンバーベースのWebアプリケーションを作成していますが、ログイン後にページをリダイレクトできるようにする必要があります。ログインアプリケーションのviews.pyファイルにあるurls.pyスクリプトの名前付きURLを使用したいのですが、一生の間、何をすべきか理解できません。私が持っているのはこれです:
def login(request):
if request.session.has_key('user'):
if request.session['user'] is not None:
return HttpResponseRedirect('/path/to/page.html')
私が達成したいのは次のようなものです。
def login(request):
if request.session.has_key('user'):
if request.session['user'] is not None:
return HttpResponseRedirect url pageName
これを実行すると構文エラーが発生します、何かアイデアはありますか?
reverse()
utils関数を使用する必要があります。
from Django.urls import reverse
# or Django < 2.0 : from Django.core.urlresolvers import reverse
def myview(request):
return HttpResponseRedirect(reverse('Arch-summary', args=[1945]))
ここで、args
は、URLの正規表現のすべての引数を満たします。辞書を渡すことで、名前付き引数を指定することもできます。
Django 1.3以降 からの正解は、リダイレクトメソッドが暗黙的に逆呼び出しを行う場合です。
from Django.shortcuts import redirect
def login(request):
if request.session.get('user'):
return redirect('named_url')
Ifステートメントをif request.session.get('user')
と書くためのより簡潔な方法。 has_keyは現在非推奨であり、.get()はNoneを返します(デフォルトでは、2番目のパラメーターを渡すことで変更可能)。したがって、これをソビウトの回答と組み合わせると、
from Django.core.urlresolvers import reverse
def login(request):
if request.session.get('user'):
return HttpResponseRedirect(reverse('my-named-url'))
from Django.core.urlresolvers import reverse
from Django.shortcuts import redirect
def login(request):
if request.session.get('user'):
return redirect(reverse('name-of-url'))
https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse-resolution-of-urls も参照してください。