27

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

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

4

4 に答える 4

46

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

于 2009-07-30T19:35:34.443 に答える
7

その 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'))
于 2009-07-31T07:56:54.810 に答える
3
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も参照してください。

于 2014-05-19T09:31:56.710 に答える