Django und Ajax (XMLHttpRequest - responseXML)

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
thonix
User
Beiträge: 47
Registriert: Samstag 12. August 2006, 00:06

Hallo zusammen,

kennt jemand eine elegante Methode wie ich eine Django Modelabfrage sauber via XML in ein responseXML übertragen kann.

Folgendes habe ich schon versucht. Jedoch liefert der responseXML immer nur NULL zurück.
Ich vermute, das ein <params> in der xml Antwort erwartet wird ?

Code: Alles auswählen

from Project.models import testmod
from django.core import serializers

serializers.serialize("xml", testmod.objects.all())

'<?xml version="1.0" encoding="utf-8"?>\n<django-objects version="1.0"><object pk="3" model="testmod"><field type="CharField" name="name">test123</field></object></django-objects>'
Ziel soll sein, das ich über ein Eingabefeld via XML ein ModelObject nachladen kann, welches ich dann ausgeben möchte ...

Für jeden Hinweis bin ich schon mal dankbar ...

Grüße

Thonix
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Du bist doch der, der festlegt, wie das XML aussehen muss, das der Server zum Client schicken soll. Von was für einem <params> sprichtst du also? Und was meinst du mit responseXML?

Generell muss ein Django-View ein HttpResponse-Objekt zurückgeben. Das initialisierst du mit einem content und einem mime_type. Wie der Content aussieht, ist dir überlassen und das wäre das XML. Ich würde das so bauen, dass ein Modell weiß, wie es sich darstellen soll. Einem generischen Serialisier (noch zudem dem von Django) würde ich das nicht überlassen.

Alternativ könnte man einfach ein Template benutzen, dass dann kein HTML, sondern eben XML liefert. Da muss man jetzt aber aufpassen, dass man kein ungültiges XML liefert.

Stefan
thonix
User
Beiträge: 47
Registriert: Samstag 12. August 2006, 00:06

Hi Stefan,

vielen Dank für deine AW.

Die Lösung ist für mein Problem relativ einfach ;)

Im Header muss noch text/xml rein ...

Der Code sieht daher dann wie folgt aus

Code: Alles auswählen

return HttpResponse(serializers.serialize("xml", testmod.objects.all()),mimetype="text/xml")
Grüße

Thonix
Antworten