2016-03-04 9 views
11

Ich habe ein Problem, für das ich keine Lösung finden kann. Ich habe eine Schaltfläche in der Navigationsleiste, die auf allen Seiten verfügbar ist, und es ist eine Schaltfläche, die für das Erstellen von Inhalt verantwortlich ist.Wie zur letzten Seite in Django nach POST-Anfrage umleiten

Ansicht, die mit der Taste Links:

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) 

Wenn Sie jetzt sehen ich zur Hauptseite ‚/‘ immer umleiten nach Erstellung von Inhalten, aber ich möchte auf die Seite zurück gehen, mit dem ich die Schaffung ins Leben gerufen von Inhalt.

Antwort

19

Sie können ein Feld next zu Ihrem Formular hinzufügen und es auf request.path setzen. Nachdem Sie Ihr Formular bearbeitet haben, können Sie auf den Wert dieses Pfades umleiten.

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) 

Diese grob ist, was django.contrib.auth das Login-Formular tut denn wenn ich mich gut erinnere.

Wenn Sie durch eine Zwischenseite passieren, können Sie die 'next' Wert über die Abfragezeichenfolgeflag passieren:

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

können Sie den HTTP_REFERER Wert verwenden:

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

Beachten Sie, dass dies nicht funktionieren wird, wenn die Client Referrer-Informationen disabled Senden (zum Beispiel eines privaten/inkognito Browser-Fenster verwenden). In diesem Fall wird es auf / umgeleitet.

+0

I Anfrage hinzufügen .META.get ('HTTP_REFERER', '/') in HttpResponseRedirect, aber leider hat es nicht geholfen. In diesem Fall bleibe ich auf der Seite "createadv". – Oleg

+0

Möglicherweise haben Sie eine zusätzliche Umleitung dazwischen. Stellen Sie sicher, dass Sie den abschließenden Schrägstrich in Ihrem 'form action =" ... "' - Tag haben, zum Beispiel "action ="/createadv/"'. – Selcuk

+0

Wenn Sie ein Formular POST senden, ist Ihr 'HTTP_REFERER' die Seite, von der aus Sie das Formular gesendet haben, was in diesem Fall tatsächlich dieselbe Seite ist. –

Verwandte Themen