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!