2010-11-26 8 views
0

J'ai un objet JSON renvoyé par le serveur. Il ressemble à ceci:Rendu de json en tant que dictionnaire dans le modèle

{"1":{"id":"1","name":"autos"}, 
"2":{"id":"2","name":"business"}, 
"3":{"id":"3","name":"cities"}, 
"4":{"id":"4","name":"drama"}, 
"5":{"id":"5","name":"movies"}, 
"6":{"id":"6","name":"finance"}, 
"7":{"id":"7","name":"electronics"}} 

Je suis rendu un modèle comme une chaîne avec mon JSON inclus:

<h3>Ugly, raw list. Yuck !</h3> 
1: {{ interests }} 
<ul> 
    {% for k,v in interests.items %} 
     <li>{{k}}. - {{ v }}</li> 
    {% endfor %} 
</ul> 

template_name = 'socialauth/interests.html' 
html = render_to_string(template_name, RequestContext(request, {'interests': ResultDict,})) 

et par conséquent que je reçois:

<h3>Ugly, raw list. Yuck !</h3> 
1: {&quot;1&quot;:{&quot;id&quot;:&quot;1&quot;,&quot;name&quot;:&quot;autos&quot;},&quot;2&quot;:{&quot;id&quot;:&quot;2&quot;,&quot;name&quot;:&quot;business&quot;},&quot;3&quot;:{&quot;id&quot;:&quot;3&quot;,&quot;name&quot;:&quot;cities&quot;},&quot;4&quot;:{&quot;id&quot;:&quot;4&quot;,&quot;name&quot;:&quot;drama&quot;},&quot;5&quot;:{&quot;id&quot;:&quot;5&quot;,&quot;name&quot;:&quot;movies&quot;},&quot;6&quot;:{&quot;id&quot;:&quot;6&quot;,&quot;name&quot;:&quot;finance&quot;},&quot;7&quot;:{&quot;id&quot;:&quot;7&quot;,&quot;name&quot;:&quot;electronics&quot;}} 
<ul> 
</ul> 

Il semble donc que ma variable {{interests}} n'est pas traitée comme un dictionnaire. Mais pourquoi ? Quoi de plus, maintenant j'inclue la liste rendue au template parent qui est aussi rendue sous forme de chaîne (parce que je la charge avec ajax). Et le résultat final se présente comme suit:

modèle

:

<div class="connect-twitter" style="background:#f8f8f8"> 
    <div id="likes-list"> 
     {{ likes|safe }} 
    </div> 
    <a href="#" class="submit-step-2">Proceed</a> 
</div> 

Résultat:

Content-Type: text/html; charset=utf-8 
{"html": "<h3>Ugly, raw list. Yuck !</h3>\n\n1: {&quot;1&quot;:{&quot;id&quot;:&quot;1&quot;,&quot;name&quot;:&quot;autos&quot;},&quot;2&quot;:{&quot;id&quot;:&quot;2&quot;,&quot;name&quot;:&quot;business&quot;},&quot;3&quot;:{&quot;id&quot;:&quot;3&quot;,&quot;name&quot;:&quot;cities&quot;},&quot;4&quot;:{&quot;id&quot;:&quot;4&quot;,&quot;name&quot;:&quot;drama&quot;},&quot;5&quot;:{&quot;id&quot;:&quot;5&quot;,&quot;name&quot;:&quot;movies&quot;},&quot;6&quot;:{&quot;id&quot;:&quot;6&quot;,&quot;name&quot;:&quot;finance&quot;},&quot;7&quot;:{&quot;id&quot;:&quot;7&quot;,&quot;name&quot;:&quot;electronics&quot;}}\n\n<ul>\n \n</ul>"} 

Et lorsque ce code est inséré en html, il semble tout simplement horrible:

http://img204.imageshack.us/img204/3858/listaxv.png

Que diable? Pourquoi le rendu n'est-il pas normalement sous forme de chaînes, mais un en-tête 'Content-type' est ajouté?

+0

Veuillez indiquer le code où vous obtenez l'objet JSON et transmettez-le au contexte. –

Répondre

0

Il semble que la variable de modèle interests soit juste une chaîne avec la réponse json. La chaîne est échappée dans le modèle, c'est pourquoi vous vous retrouvez avec tous les ". Vérifiez si la réponse du serveur est correctement analysée.

Pour vérifier le type, vous pouvez utiliser la classe de type, c'est-à-dire type(ResultDict).

+0

tout d'abord, mon json a été interprété comme une chaîne. Alors maintenant je le lis avec le module json. La prochaine chose est que pour des raisons que je ne comprends pas, request.is_ajax() était toujours vrai et j'obtenais un HTTPResponse dans chaque cas au lieu de la chaîne pure. – mastodon

0

Effectuez-vous des conversions sur le respons, comme $ parseJSON (string) ou eval (string) pour convertir la réponse à un objet JS?

Questions connexes