Est-il possible de retourner un HttpResponse dans django avec texte & un objet json?
De mon point de vue de la fonction, j'aimerais retourner un objet json (data1) et du texte/html (formulaire). Est-ce possible?
Ici une partie de mes views.py:
if request.is_ajax() and request.method == 'POST':
...
if form.is_valid():
answer = form.cleaned_data['answer'] # Answer extracted from form is also a string
a1 = ques1.correct_answer
if a1 == answer:
test1 = question_list.get(id=nextid)
form = AnswerForm(test1)
ques1 = question_list.filter(id=nextid) # Filter next question as <qs>
data1 = serializers.serialize("json",ques1) # Json-ize
# ********EDITED HERE **********
variables1 = Context({
'form' : form,
'q1' : data1,
})
#response = HttpResponse()
#response['data1'] = response.write(data1)
#response['form'] = response.write(form)
if nextid <= qsnlen:
return HttpResponse(variables1, mimetype="application/json")
#return HttpResponse(response)
else:
...
J'aimerais renvoyer le formulaire html et le ques1 objet json. Comment puis-je faire cela? Merci à l'avance.
OriginalL'auteur Harshil Parikh | 2012-01-29
Vous devez vous connecter pour publier un commentaire.
Viens de mettre les deux morceaux de données en JSON contenant, l'un des principaux avec les données du formulaire et l'autre avec le code HTML comme une chaîne affichée. Dans le navigateur, vous pouvez simplement tirer sur les deux touches & faire votre chose.
De votre point de vue:
En js:
Et bien oui, vous ne pouvez pas JSON-sérialiser des objets Python. Vous ne pouvez pas envoyer de " la question de l'objet, à proprement parler, vous pouvez uniquement envoyer un JSON dict les attributs de l'objet. Django a un intégré dans la sérialisation helper qui peut gérer querysets.
Pour Importer HttpResponse: from django.http importation HttpResponse
OriginalL'auteur AdamKG
Utilisation JsonResponse
OriginalL'auteur i_emmanuel
À le faire avec une seule réponse; vous devez envoyer le JSON en tant que texte brut dans le contexte de votre modèle de réponse (HTML).
Si vous avez besoin d'envoyer JSON comme distinct objet JSON, avec son propre type mime, alors vous devez écrire deux points de vue; celui qui envoie le JSON comme
application/json
et l'autre qui renvoie à la forme (HTML).EDIT:
Vous n'êtes pas de retour JSON objets, mais vous êtes en tournant d'un dictionnaire qui comporte deux éléments de deux types différents. Comme je l'ai expliqué dans les commentaires, dans l'une de demande/réponse de cycle; vous ne pouvez retourner une réponse qui a un type mime spécifique qui est basé sur le contenu et la façon dont vous souhaitez que le navigateur de le gérer. La plupart du temps le type de contenu est
'text/html'
.Dans votre scénario, si vous voulez retourner à la fois le HTML (ce qui est), et la réponse JSON (qui est une chaîne de caractères), vous devez renvoyer le code HTML.
Si vous souhaitez retourner un JSON à Jquery comme un objet JSON; vous avez besoin de détecter le type de la requête. Dans votre front-end (les modèles), vous permettra de lancer deux demandes, l'une du navigateur, qui sera de retour le formulaire. L'autre à partir de jQuery, qui sera de retour approprié objet JSON.
Ici est une approche possible pour cette:
Vous pouvez retourner une réponse, avec de multiples objets dans le contexte. Cela peut être d'un seul type mime - de sorte que vous pouvez envoyer plusieurs éléments dans une réponse en retour; mais vous pas combiner les deux types mime dans une réponse. Dans votre exemple, vous définissez le type mime comme
application/json
. Vous pouvez techniquement envoyer tout ce que vous voulez et mettre le type mime comme que ce soit, mais cela ne peut pas faire ce que vous voulez sur le client final. Pour envoyer le code HTML de la forme et de l'objet JSON - ajouter l'objet JSON pour le contexte de la réponse.Veuillez vérifier le fichier de code ci-dessus. J'ai ajouté à la fois la forme et l'objet json pour le contexte, et je suis l'envoi de ce retour. Est-ce cela que vous voulez dire? Fera l'objet json lire correctement sur le côté client (je suis en utilisant jquery)? La lecture de ce côté client sera un peu un cauchemar, je pense. Je n'ai pas utilisé RequestContext car il ya beaucoup de variables qui sont retournés en arrière que je n'ai pas besoin. Merci pour votre aide.
Vous ne pouvez pas avoir deux états; seul le premier sera le travail. Avec une demande - vous ne pouvez avoir qu'une seule réponse retournée. Vous ne pouvez pas à la fourche de deux réponses, avec deux différents types de mime, dans une requête/réponse de cycle.
Désolé, je voulais dire pour commenter la deuxième instruction de retour. Bien que maintenant, je reçois à la fois la forme et de l'objet json dans la réponse, je suis encore à essayer de comprendre la façon dont l'onu-paquet de manière appropriée sur le côté client via jquery.
OriginalL'auteur Burhan Khalid