Django-fr

Forum

#1 12-02-2009 00:54:35

Thiébaud Weksteen
Membre
Inscription : 11-08-2010
Messages : 8

Template JS

Bonsoir,

Je suis en train de réaliser une application web avec Django et je
suis confronté à un problème que je
n'arrive pas à résoudre.

J'utilise une vue pour créer un flux JSON qui sera lu via AJAX.
Voici l'appel au raccourci de rendu :
return render_to_response("MatrixMultiplicationData.js", {'cid' : cid
, 'x' : mat1, 'y' : mat2 })

Dans mon répertoire de template, j'ai le fichier
MatrixMultiplicationData.js qui contient :
{% templatetag openbrace %} "cid" : "{{ cid }}" , "x" : {{ x }}, "y" :
{{ y }} {% templatetag closebrace %}


Mon problème est le suivant : lors de l'appel à cette vue, j'obtiens
comme résultat (firefox) :

{ "cid" : '9ae1a0e5a424f61bc96f699e2c584bb6e0e2766e' , "x" : [[1, 2,
3],[1,4,0],[2,2,1]], "y" : [[6,2
,8],[9,1,3],[0,7,6]] }
    ({cid: "9ae1a0e5a424f61bc96f699e2c584bb6e0e2766e", x: [[1, 2, 3],
[1, 4, 0], [2, 2, 1]], y: [[6,
2, 8], [9, 1, 3], [0, 7, 6]]});

Non, vous ne rêvez pas, il y a deux fois la même chose. Ou plutôt sur
la première ligne, le résultat attendu
et sur la seconde, une répétition (peut etre interne à django) !?
Par ailleurs en modifiant légèrement le template (notez le Q final) :
{% templatetag openbrace %} "cid" : "{{ cid }}" , "x" : {{ x }}, "y" :
{{ y }} {% templatetag closebrace %} Q

Le résultat est bien celui attendu :
{ "cid" : "0dfb15b3fa44e533f9b644a0b01e2237c7286429" , "x" : [[1, 2,
3],[1,4,0],[2,2,1]], "y" : [[6,2
,8],[9,1,3],[0,7,6]] } Q


A votre avis, d'où peut venir ce problème ?
Merci pour votre aide.
Thiébaud

Hors ligne

#2 12-02-2009 01:22:58

Benoit Chesneau
Membre
Inscription : 11-08-2010
Messages : 57

Re : Template JS

2009/2/12 Thiébaud Weksteen <tweksteen _AT_ gmail.com>:
> Bonsoir,
>
> Je suis en train de réaliser une application web avec Django et je
> suis confronté à un problème que je
> n'arrive pas à résoudre.
>
> J'utilise une vue pour créer un flux JSON qui sera lu via AJAX<

Ton problème vient de là.

Pourquoi ne pas utiliser des vrais outils pour génerer du json ?

Par exemple simplejson qui sérialise tes objets python. Ce sera
beaucoup beaucoup plus propre et moins source d'erreur.

- benoît

Hors ligne

#3 12-02-2009 03:48:57

Richard
Membre
Lieu : Paris
Inscription : 11-08-2010
Messages : 22
Site Web

Re : Template JS

Je pense que c'est un problème de mimetype

essaye quelque chose comme ca:

return HttpResponse(json, mimetype='application/json')

la variable json étant ici un chaine représentant un objet json
j'ai aussi vu utiliser mimetype='application/javascript'



Richard Moch
http://www.rootsaka.com


2009/2/12 Thiébaud Weksteen <tweksteen _AT_ gmail.com>

> Bonsoir,
>
> Je suis en train de réaliser une application web avec Django et je
> suis confronté à un problème que je
> n'arrive pas à résoudre.
>
> J'utilise une vue pour créer un flux JSON qui sera lu via AJAX.
> Voici l'appel au raccourci de rendu :
> return render_to_response("MatrixMultiplicationData.js", {'cid' : cid
> , 'x' : mat1, 'y' : mat2 })
>
> Dans mon répertoire de template, j'ai le fichier
> MatrixMultiplicationData.js qui contient :
> {% templatetag openbrace %} "cid" : "{{ cid }}" , "x" : {{ x }}, "y" :
> {{ y }} {% templatetag closebrace %}
>
>
> Mon problème est le suivant : lors de l'appel à cette vue, j'obtiens
> comme résultat (firefox) :
>
> { "cid" : '9ae1a0e5a424f61bc96f699e2c584bb6e0e2766e' , "x" : [[1, 2,
> 3],[1,4,0],[2,2,1]], "y" : [[6,2
> ,8],[9,1,3],[0,7,6]] }
>    ({cid: "9ae1a0e5a424f61bc96f699e2c584bb6e0e2766e", x: [[1, 2, 3],
> [1, 4, 0], [2, 2, 1]], y: [[6,
>  2, 8], [9, 1, 3], [0, 7, 6]]});
>
> Non, vous ne rêvez pas, il y a deux fois la même chose. Ou plutôt sur
> la première ligne, le résultat attendu
> et sur la seconde, une répétition (peut etre interne à django) !?
> Par ailleurs en modifiant légèrement le template (notez le Q final) :
> {% templatetag openbrace %} "cid" : "{{ cid }}" , "x" : {{ x }}, "y" :
> {{ y }} {% templatetag closebrace %} Q
>
> Le résultat est bien celui attendu :
> { "cid" : "0dfb15b3fa44e533f9b644a0b01e2237c7286429" , "x" : [[1, 2,
> 3],[1,4,0],[2,2,1]], "y" : [[6,2
> ,8],[9,1,3],[0,7,6]] } Q
>
>
> A votre avis, d'où peut venir ce problème ?
> Merci pour votre aide.
> Thiébaud
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#4 12-02-2009 09:19:15

Thiébaud Weksteen
Membre
Inscription : 11-08-2010
Messages : 8

Re : Template JS

Bonjour,

Tout d'abord merci pour vos réponses. J'ai suivi les conseils de
Richard et j'ai ajouter le type
mime. J'ai essayer avec application/json et application/javascript
avec le même résultat.

J'ai donc suvi les conseils de Benoit, c-à-d généré directement le
JSON dans la vue
sans passer par des templates. Toujours le même problème :

Voila ma vue dans son intégralité (je lui passe directement une chaîne
de caractère):

def compute(request):
    return HttpResponse('{ "cid" :
"de9bb13d51039748f677e69e8a17977713353666", "x" :
[[1,2,3],[1,4,0],[2,2,1]], "y" : [[6,2,8],[9,1,3],[0,7,6]]}',
mimetype='application/json')

Et la réponse de firefox :
{ "cid" : "de9bb13d51039748f677e69e8a17977713353666", "x" :
[[1,2,3],[1,4,0],[2,2,1]], "y" : [[6,2,8],[9,1,3],[0,7,6]]}    ({cid:
"de9bb13d51039748f677e69e8a17977713353666", x: [[1, 2, 3], [1, 4, 0],
[2, 2, 1]], y: [[6, 2, 8], [9, 1, 3], [0, 7, 6]]});

Le plus bizarre c'est que dès que je rajoute un caractère devant ou
derrière, le doublon disparait !

Merci pour votre aide.
Thiébaud

Le 12 février 2009 03:48, Richard <richard.moch _AT_ gmail.com> a écrit :
> Je pense que c'est un problème de mimetype
>
> essaye quelque chose comme ca:
>
> return HttpResponse(json, mimetype='application/json')
>
> la variable json étant ici un chaine représentant un objet json
> j'ai aussi vu utiliser mimetype='application/javascript'
>
>
>
> Richard Moch
> http://www.rootsaka.com
>
>
> 2009/2/12 Thiébaud Weksteen <tweksteen _AT_ gmail.com>
>>
>> Bonsoir,
>>
>> Je suis en train de réaliser une application web avec Django et je
>> suis confronté à un problème que je
>> n'arrive pas à résoudre.
>>
>> J'utilise une vue pour créer un flux JSON qui sera lu via AJAX.
>> Voici l'appel au raccourci de rendu :
>> return render_to_response("MatrixMultiplicationData.js", {'cid' : cid
>> , 'x' : mat1, 'y' : mat2 })
>>
>> Dans mon répertoire de template, j'ai le fichier
>> MatrixMultiplicationData.js qui contient :
>> {% templatetag openbrace %} "cid" : "{{ cid }}" , "x" : {{ x }}, "y" :
>> {{ y }} {% templatetag closebrace %}
>>
>>
>> Mon problème est le suivant : lors de l'appel à cette vue, j'obtiens
>> comme résultat (firefox) :
>>
>> { "cid" : '9ae1a0e5a424f61bc96f699e2c584bb6e0e2766e' , "x" : [[1, 2,
>> 3],[1,4,0],[2,2,1]], "y" : [[6,2
>> ,8],[9,1,3],[0,7,6]] }
>>    ({cid: "9ae1a0e5a424f61bc96f699e2c584bb6e0e2766e", x: [[1, 2, 3],
>> [1, 4, 0], [2, 2, 1]], y: [[6,
>>  2, 8], [9, 1, 3], [0, 7, 6]]});
>>
>> Non, vous ne rêvez pas, il y a deux fois la même chose. Ou plutôt sur
>> la première ligne, le résultat attendu
>> et sur la seconde, une répétition (peut etre interne à django) !?
>> Par ailleurs en modifiant légèrement le template (notez le Q final) :
>> {% templatetag openbrace %} "cid" : "{{ cid }}" , "x" : {{ x }}, "y" :
>> {{ y }} {% templatetag closebrace %} Q
>>
>> Le résultat est bien celui attendu :
>> { "cid" : "0dfb15b3fa44e533f9b644a0b01e2237c7286429" , "x" : [[1, 2,
>> 3],[1,4,0],[2,2,1]], "y" : [[6,2
>> ,8],[9,1,3],[0,7,6]] } Q
>>
>>
>> A votre avis, d'où peut venir ce problème ?
>> Merci pour votre aide.
>> Thiébaud
>> _______________________________________________
>> django mailing list
>> django _AT_ lists.afpy.org
>> http://lists.afpy.org/mailman/listinfo/django
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#5 12-02-2009 09:38:27

Thiébaud Weksteen
Membre
Inscription : 11-08-2010
Messages : 8

Re : Template JS

Rebonjour,

J'ai finalement trouvé le problème. Il s'agit juste d'un bug de
firebug, qui indique plus
que le résultat de la requête AJAX !
Django est hors de cause smile

Merci à tous.
Cordialement,
Thiébaud

Le 12 février 2009 09:19, Thiébaud Weksteen <tweksteen _AT_ gmail.com> a écrit :
> Bonjour,
>
> Tout d'abord merci pour vos réponses. J'ai suivi les conseils de
> Richard et j'ai ajouter le type
> mime. J'ai essayer avec application/json et application/javascript
> avec le même résultat.
>
> J'ai donc suvi les conseils de Benoit, c-à-d généré directement le
> JSON dans la vue
> sans passer par des templates. Toujours le même problème :
>
> Voila ma vue dans son intégralité (je lui passe directement une chaîne
> de caractère):
>
>  def compute(request):
>    return HttpResponse('{ "cid" :
> "de9bb13d51039748f677e69e8a17977713353666", "x" :
> [[1,2,3],[1,4,0],[2,2,1]], "y" : [[6,2,8],[9,1,3],[0,7,6]]}',
> mimetype='application/json')
>
> Et la réponse de firefox :
> { "cid" : "de9bb13d51039748f677e69e8a17977713353666", "x" :
> [[1,2,3],[1,4,0],[2,2,1]], "y" : [[6,2,8],[9,1,3],[0,7,6]]}    ({cid:
> "de9bb13d51039748f677e69e8a17977713353666", x: [[1, 2, 3], [1, 4, 0],
> [2, 2, 1]], y: [[6, 2, 8], [9, 1, 3], [0, 7, 6]]});
>
> Le plus bizarre c'est que dès que je rajoute un caractère devant ou
> derrière, le doublon disparait !
>
> Merci pour votre aide.
> Thiébaud
>
> Le 12 février 2009 03:48, Richard <richard.moch _AT_ gmail.com> a écrit :
>> Je pense que c'est un problème de mimetype
>>
>> essaye quelque chose comme ca:
>>
>> return HttpResponse(json, mimetype='application/json')
>>
>> la variable json étant ici un chaine représentant un objet json
>> j'ai aussi vu utiliser mimetype='application/javascript'
>>
>>
>>
>> Richard Moch
>> http://www.rootsaka.com
>>
>>
>> 2009/2/12 Thiébaud Weksteen <tweksteen _AT_ gmail.com>
>>>
>>> Bonsoir,
>>>
>>> Je suis en train de réaliser une application web avec Django et je
>>> suis confronté à un problème que je
>>> n'arrive pas à résoudre.
>>>
>>> J'utilise une vue pour créer un flux JSON qui sera lu via AJAX.
>>> Voici l'appel au raccourci de rendu :
>>> return render_to_response("MatrixMultiplicationData.js", {'cid' : cid
>>> , 'x' : mat1, 'y' : mat2 })
>>>
>>> Dans mon répertoire de template, j'ai le fichier
>>> MatrixMultiplicationData.js qui contient :
>>> {% templatetag openbrace %} "cid" : "{{ cid }}" , "x" : {{ x }}, "y" :
>>> {{ y }} {% templatetag closebrace %}
>>>
>>>
>>> Mon problème est le suivant : lors de l'appel à cette vue, j'obtiens
>>> comme résultat (firefox) :
>>>
>>> { "cid" : '9ae1a0e5a424f61bc96f699e2c584bb6e0e2766e' , "x" : [[1, 2,
>>> 3],[1,4,0],[2,2,1]], "y" : [[6,2
>>> ,8],[9,1,3],[0,7,6]] }
>>>    ({cid: "9ae1a0e5a424f61bc96f699e2c584bb6e0e2766e", x: [[1, 2, 3],
>>> [1, 4, 0], [2, 2, 1]], y: [[6,
>>>  2, 8], [9, 1, 3], [0, 7, 6]]});
>>>
>>> Non, vous ne rêvez pas, il y a deux fois la même chose. Ou plutôt sur
>>> la première ligne, le résultat attendu
>>> et sur la seconde, une répétition (peut etre interne à django) !?
>>> Par ailleurs en modifiant légèrement le template (notez le Q final) :
>>> {% templatetag openbrace %} "cid" : "{{ cid }}" , "x" : {{ x }}, "y" :
>>> {{ y }} {% templatetag closebrace %} Q
>>>
>>> Le résultat est bien celui attendu :
>>> { "cid" : "0dfb15b3fa44e533f9b644a0b01e2237c7286429" , "x" : [[1, 2,
>>> 3],[1,4,0],[2,2,1]], "y" : [[6,2
>>> ,8],[9,1,3],[0,7,6]] } Q
>>>
>>>
>>> A votre avis, d'où peut venir ce problème ?
>>> Merci pour votre aide.
>>> Thiébaud
>>> _______________________________________________
>>> django mailing list
>>> django _AT_ lists.afpy.org
>>> http://lists.afpy.org/mailman/listinfo/django
>>
>>
>> _______________________________________________
>> django mailing list
>> django _AT_ lists.afpy.org
>> http://lists.afpy.org/mailman/listinfo/django
>>
>

Hors ligne

Pied de page des forums