2016-03-04 25 views
11

私は解決策を見つけることができない問題に直面しています。私はすべてのページで利用可能なボタンをナビゲーションバーに持っており、それはあるコンテンツを作成するボタンです。ボタンとリンクPOSTリクエスト後にDjangoの前のページにリダイレクトする方法

ビュー:

def createadv(request): 
    uw = getuw(request.user.username) 
    if request.method =='POST': 
    form = AdverForm(request.POST, request.FILES) 
    if form.is_valid(): 
     form.instance.user = request.user 
     form.save() 
     return HttpResponseRedirect('/', {'username': request.user.username, 'uw': uw}) 
    args = {} 
    args.update(csrf(request)) 
    args['username'] = request.user.username 
    args['form'] = AdverForm() 
    args['uw'] = uw 
    return render_to_response('createadv.html', args) 

あなたは、私は常にコンテンツを作成した後、メインページ「/」にリダイレクト今見ることができますが、私は私がの作成を開始しましたのページに戻りたい場合はコンテンツ。クライアントは、(プライベート/シークレットブラウザウィンドウを使用して、例えば)リファラー情報を送信無効の場合は、これは動作しないこと

return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) 

注:

答えて

19

nextフィールドをフォームに追加し、request.pathに設定することができます。フォームを処理した後、このパスの値にリダイレクトできます。

template.html

<form method="POST"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="hidden" name="next" value="{{ request.path }}"> 
    <button type="submit">Let's Go</button> 
</form> 

views.py

next = request.POST.get('next', '/') 
return HttpResponseRedirect(next) 

これは、私はよく覚えている場合django.contrib.authは、ログインフォームのために何をするかおおよそです。

あなたは中間ページを通過する場合は、クエリ文字列を経由して '次へ' 値を渡すことができます:

some_page.html

<a href="{% url 'your_form_view' %}?next={{ request.path|urlencode }}">Go to my form!</a> 

template.html

<form method="POST"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="hidden" name="next" value="{{ request.GET.next }}"> 
    <button type="submit">Let's Go</button> 
</form> 
3

あなたがHTTP_REFERER値を使用することができます。そのような場合は/にリダイレクトされます。

+0

私は要求を追加.META.get( 'HTTP_REFERER'、 '/')HttpResponseRedirectで、残念ながらそれは役に立たなかった。この場合、私は "createadv"ページにとどまります。 – Oleg

+0

間に余分なリダイレクトがある可能性があります。 'form action =" ... "'タグの末尾にスラッシュがあることを確認してください。たとえば、 'action ="/createadv/"'のようにしてください。 – Selcuk

+0

フォームをPOSTすると、 'HTTP_REFERER'はフォームを送信したページです。この場合、実際には同じページです。 –

関連する問題