5 Stimmen

django, Rückkehr zur vorherigen Seite nach Formular POST senden

In meiner Webseite habe ich ein Formular, das nach einigen Ajax-Anfragen mit Daten gefüllt wird. Wenn ein Benutzer zum Beispiel ein Element aus der Liste auswählt, wird eine einfache Ajax-Anfrage an die Datenbank gesendet, dass das Element ausgewählt wurde (aber noch nicht bestätigt). Dann wird die Liste auf der Webseite mit einer einfachen Ajax-Anfrage neu geladen (nur die Liste, nicht die ganze Seite), um die neue Artikelliste abzurufen.

Ich denke, dass es sich hierbei mehr oder weniger um eine klassische Warenkorb-Implementierung handelt.

Wenn der Benutzer jedoch auf "Submit" (klassisches POST-Formular, nicht Ajax POST aus Gründen der Implementierung) drückt, um die gesamte Liste zu bestätigen, möchte ich zur aktuellen Seite zurückkehren. (Aktuelle Seite variiert) Ist dies möglich? Ich verwende django.

Danke.

13voto

Timmy O'Mahony Punkte 51388

Sie können eine next GET-Parameter beim Absenden des Formulars, ähnlich wie bei django.contrib.auth login() Methode:

https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login :

<form action="/url/to/post/form/?next={{ some_variable }}">

wobei die Variable einfach die aktuelle URL (aus der Anfrage) oder eine generierte URL sein kann. In der Ansicht, die das Formular verarbeitet, prüfen Sie einfach, ob ein next Parameter und leiten Sie entsprechend um:

from django.shortcuts import redirect
if 'next' in request.GET:
    return redirect(request.GET['next'])

1voto

johncosta Punkte 3652

Möglicherweise können Sie das Post/Redirect/Get-Design-Muster (PRG) verwenden. Weitere allgemeine Informationen über Post/Redirect/Get finden Sie im Folgenden: http://en.wikipedia.org/wiki/Post/Redirect/Get Dort gibt es einige schöne Prozessablaufdiagramme.

Ein allgemeines Beispiel für eine Ansicht, die PRG implementiert, könnte wie folgt aussehen:

# urls.py
urlpatterns = patterns('',
    url(r'^/$', views.my_view, name='named_url'),
)

# forms.py
class MyForm(forms.Form):
    pass # the form

# views.py
def my_view(request, template_name='template.html'):
    """ Example PostRedirectGet 
    This example uses a request context, but isn't 
    necessary for the PRG
    """
    if request.POST:
        form = MyForm(request.POST)
        if form.is_valid():
            try:
                form.save()
                # on success, the request is redirected as a GET
                return HttpResponseRedirect(reverse('named_url'))
            except:
                pass # handling can go here
    else:
        form = MyForm()

    return render_to_response(template_name, {
        'form':form
    }, context_instance=RequestContext(request))

Wenn Sie etwas Interessanteres mit dem GET machen wollen, reverse kann args und kwargs annehmen. Manipulieren Sie die view params, url_pattern und reverse call, um die Ergebnisse anzuzeigen, die Sie sehen möchten.

Ein weiterer Hinweis ist, dass Sie nicht auf die gleiche Ansicht umleiten müssen (wie in diesem Beispiel). Es kann eine beliebige benannte Ansicht sein, zu der Sie den Benutzer umleiten möchten.

0voto

Meitham Punkte 8241

Aktuelle Seite ist ein sehr vager Begriff, aber ich nehme an, Sie wollen die Seite, die Sie auf die Formularseite verwiesen hat. Diese ist normalerweise (nicht immer) im HTTP_REFERRER-Header der Anfrage selbst gespeichert. Sie könnten versuchen, dies aus der Anfrage zu holen und eine Weiterleitung zu erstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X