Djangoとurls.py:名前付きURL経由でHttpResponseRedirectを実行するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1208802

質問

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

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

役に立ちましたか?

解決

<を使用する必要がありますcode> 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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top