web-dev-qa-db-ja.com

Django and urls.py:名前付きURLを介してHttpResponseRedirectを実行するにはどうすればよいですか?

メンバーベースの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

これを実行すると構文エラーが発生します、何かアイデアはありますか?

25
Akoi Meexx

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の正規表現のすべての引数を満たします。辞書を渡すことで、名前付き引数を指定することもできます。

42
Soviut

Django 1.3以降 からの正解は、リダイレクトメソッドが暗黙的に逆呼び出しを行う場合です。

from Django.shortcuts import redirect

def login(request):
    if request.session.get('user'):
        return redirect('named_url')
13
Robert Grant

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'))
7
AKX
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 も参照してください。

3
Kwaw Annor