2009-11-19 2 views
2

Quelle est la bonne façon de faire une requête ajax, j'ai vu des gens utiliser un rendu render_to_string pour qu'ils puissent faire toute leur mise en forme dans python en utilisant le langage template. par exemple, ~Convention de formatage ajax de Django

return render_to_string('calendar.html', { 
'self' : self, 
'month' : self.today.month,}) 

avec ce que le javascript:

$('#django_calendar_response').html(response) 

Mais j'ai aussi vu des gens en forme de leurs sortie dans javascript en utilisant les fonctions de dom telles que

return HttpResponse(serializers.serialize("json", 
ilst, relations=('user',)), "application/json") 

où le javascript est

items_display=function(items){ 
    return LI(null, 
    A({'class':'userlink', 
    'href':'/url/user/'+items.fields.user.fields.name}, 
    items.fields.user.fields.name), 

est l'un de ces corrects et l'autre faux? devrais-je formater ma sortie en javascript ou en python?

+0

"Correct"? Cela dépend de ce qu'AJAX attend. Habituellement, Ajax utilise JSON. Quel est votre AJAX en utilisant? –

+0

Il peut s'attendre non plus, je n'étais pas sûr s'il y avait des avantages/inconvénients à l'autre méthode que de garder les objets disponibles pour la manipulation dans javascript ou la fiabilité du formatage tout en python – dagoof

Répondre

1

je fais les deux. Parfois, j'ai de courts extraits de modèles que je {% include %} dans le modèle de grande page. Il est souvent plus sec de les rendre et de retourner le code HTML à insérer dans le DOM (puisque le code est déjà configuré) que d'avoir à écrire JS pour le faire (à nouveau). D'autres fois, je génère juste du JSON et l'injecte dans le DOM.

En peu de temps, vous pouvez mélanger et faire correspondre la situation.

+0

c'était la réponse que je cherchais merci – dagoof

2

Je me sers JSON exclusivement pour AJAX, avec simplejson retour toutes les données est vraiment facile, il ressemble à ceci:

from django.utils import simplejson 
reply = simplejson.dumps({'comment_body': formatted_post, 'user_icon': request.user.profile.image.url }) 
return HttpResponse(reply, mimetype="application/json") 

et du côté client, avec la méthode .post traitement d'une réponse JSON de jquery est vraiment trop facile, vous pouvez spécifier JSON comme type de données:

$.post("/postcomment/", { body: comment_body }, 
    function(data){ 
    alert(data.comment_body) 
    }, "json"); 

Je ne dis pas que c'est la meilleure solution, mais il est avéré très robuste et facile à manipuler ...

Hope this helps,

Martin