2016-09-03 6 views
1

私は、Djangoの以下のスニペットに見られるように、ログインビューに建てを使用しています:Djangoテンプレートをリダイレクトして '次へ'変数を使用する方法は?

urls.py

url(r'^login$',login,{'template_name': 'login.html'},name="login"), 

template.html

<form method="post" action="{% url 'login' %}"> 
{% csrf_token %} 
<table> 
<tr> 
    <td>{{ form.username.label_tag }}</td> 
    <td>{{ form.username }}</td> 
</tr> 
<tr> 
    <td>{{ form.password.label_tag }}</td> 
    <td>{{ form.password }}</td> 
</tr> 
</table> 

<input type="submit" value="login" /> 
<input type="hidden" name="next" value="{{ next }}" /> 
</form> 

をどのようにすることができます次の変数を使用して、デフォルトの/accounts/profile/と異なるURLにリダイレクトします。django redirに影響する?私はsettings.pyファイルを参照している人の知っているが、私はこれを行うには、次の変数を利用することができますか?

あなたはDjangoのログインビューすなわちを使用している場合

+0

あなたは文脈で「次」変数を渡す必要があり、見てみましょうhttp://stackoverflow.com/questions/3441436/the-next-parameter-redirect-django-:ログインREFについては

contrib-auth-login – arcegk

答えて

2

(私も、これの説明ははるかに高く評価されるだろうドキュメントを参照した後、次の変数がどのように動作するかの本当にわからないんだけど)、

from django.contrib.auth.views import login 

次のURLをテンプレートに渡すだけで済みます。リクエストがログインビューに送信されると、コードはそのURLにリダイレクトされます。何次のURLは

<form method="post" action="{% url 'login' %}?next={{next_url}}"> 

は、コンテキストを経由して "next_url" 値を渡し、

settings.LOGIN_REDIRECT_URL is used 

あなたは、単純なパスは、次のURLはただ好きなことができますが見つかりませんさ。

次のケースでは、カスタムビューの次のURLリダイレクトが必要な場合は、次のURLを取得するためにビュー内にコードを書き込むだけで、ビュー内でジョブを実行した後で次のURLにリダイレクトできます。我々は、クエリのparamsとして、次のURLに合格した場合は、上記のビューでは、我々は、HTTPを取得要求を取得し、:

from django.utils.http import is_safe_url 

def your_view(request): 
    # do your codes 
    redirect_to = request.GET.get(next, '') # use get or Post as per your requirement 
    if is_safe_url(url=redirect_to, host=request.get_host()): 
     HttpResponseRedirect(redirect_to) 
    else: 
     # your response 

は、次の変数がどのように機能するか、あなたの疑問をクリアします。私たちはそれを視野に入れます。 "request.GET.get(next、 '')は、あなたがビューから送信した次のURLを取得します。ビューレベルから必要な機能を実行できます。次のURLが存在し、有効な場合は、HttpResponseRedirectを使用して次のURLにリダイレクトできます。 Django: Redirect to previous page after login

関連する問題