2 Stimmen

django Umleiten einer Ajax-Anfrage, aber halten es ein "is_ajax"

Die Frage: Wie kann ich auf eine Seite in Django umleiten, aber "fake" es als eine Ajax-Anfrage?

So habe ich eine Post-Daten-Anfrage - über Ajax (jQuery) getan. Dies wird an meinen Django-Server gesendet, der die Daten hinzufügt (oder entfernt!) und dann mit einer "gut gemacht Sie einige Daten hinzugefügt"-Seite antwortet.

Diese Erfolgsseite beginnt mit:

{% extends request.is_ajax|yesno:"base_ajax.htm,base.htm" %}

die eine nette Art und Weise des Hinzufügens in alle Arten von Headern, wenn die Anforderung war nicht ein Ajax ein, und ignorieren die Header, wenn es war. Ich habe dies hinzugefügt, damit die Seite sowohl mit als auch ohne Javascript funktioniert (müssen wir das noch tun?)

Und dann fügte ich ein Post-Redirect-Get hinzu (d.h. der Post-Teil der Ansicht ist nicht return render_to_response sondern vielmehr return redirect('url here')

Und jetzt ist das Problem, dass die Umleitung vergisst, dass die ursprüngliche Anfrage eine Ajax-Anfrage war. Also ich immer am Ende das Laden der gesamten Seite - Header und alle - in ein div, das ist nicht das, was ich will.

Ich würde also gerne in der Lage sein der Umleitung mitteilen, dass sie so tun soll, als sei sie eine Ajax-Anfrage

Wie kann ich das tun?

UPDATE: für alle, die dies in "der Zukunft (mit Jetpacks!)" lesen: Redirects übertragen die Header-Informationen nicht - siehe https://www.rfc-editor.org/rfc/rfc2616#section-7.1

Am Ende habe ich das hier gemacht:

return redirect(self.success_redirect + '/' + str(int(request.is_ajax()))) 

und dann, für die Ansicht, auf die ich umgeleitet wurde, hatte ich:

url(r'^editStorySuccess/(?P<ajax>\d+)$',
    showAfterCheckingAjax,
    {
        'template':'stories/editStorySuccess.html'
    },
    'editStorySuccess'
),

und in der showAfterCheckingAjax Ansicht hatte ich gerade:

if int(ajax):
    request.META['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
return render_to_response(template, {'user':request.user}, 
    context_instance=RequestContext(request))

und das funktioniert bei mir!

3voto

Simeon Visser Punkte 115081

Erstellen Sie eine andere URL, die dieselbe Ansicht darstellt wie die URL, auf die Sie jetzt umleiten, aber mit einem zusätzlichen GET-Parameter. Sie können diesen GET-Parameter verwenden, um die Vorlage zu ändern, die für die Darstellung der Ansicht verwendet wird. In jedem Fall wird eine Weiterleitung als neue Anfrage betrachtet, so dass Sie etwas tun müssen, um diese zusätzlichen Informationen an diese Anfrage zu übergeben.

1voto

Vivek S Punkte 4976

Holen Sie sich die Umleitungsurl als Json-Daten von der Callback-Methode der Anfrage und leiten Sie dann von der Seite mit JavaScript um.

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