2012-03-28 4 views
0

à mon avis je générer une décharge JSON:objets JSON passant de Django à JQuery

def myview: 
    ... 
    data = list(queryset) # a query set of values 
    json_dump = simplejson.dumps(data) 
    ... 
    return render_to_response(request, 'results.html', { 'json_dump' : json_dump}) 

mon modèle référence à un fichier javascript:

$(document).ready(function() { 
     // some stuff involving the json_dump var 
     ... 
    }; 

Ma question est, car je ne peux pas passer json_dump à $(document).ready(function() directement, quelle est la meilleure façon d'obtenir les données json_dump dans le js?

Répondre

4

Si je comprends ce que vous essayez de faire, vous voulez passer un blob JSON dans votre modèle, de sorte qu'il est accessible à un fichier JS qui est référencé à partir du code HTML?

Dans ce cas, vient de créer une variable pour recevoir la valeur dans votre modèle:

<script type="text/javascript"> 
    var json_dump = "{{ json_dump }}" 
</script> 

Et maintenant utiliser json_dump où vous le souhaitez dans votre JS.

+0

Pour développer, juste sortie le blob json à une variable à l'intérieur d'une balise de script dans votre modèle. –

+1

Le langage de modèle ne doit-il pas être entre guillemets lorsqu'il est utilisé en javascript? c'est-à-dire var json_dump = "{{json_dump}}"; – Sid

+0

@sid - merci, mis à jour –

3

La réponse ci-dessus est correcte, sauf que vous aurez des guillemets autour de votre vidage JSON qui n'est probablement pas ce que vous voulez. Pour l'utiliser, vous auriez à eval (json_dump), plutôt que de simplement l'appeler comme un objet ... Je serais probablement spiff il un peu comme ceci:

<script> 
    var window.json_dump = {{ json_dump|safe }}; 
</script> 

<script> 
    // Then later in your other javscript which comes AFTER the above script tags... 
    $(document).ready(function() { 
    alert(window.json_dump.foo); 
    }); 
</script> 
+1

Sans le modificateur '| safe', le' json_dump' est inutilisable. – IAbstract