Django-fr

Forum

#1 04-07-2012 18:40:53

frncseric
Membre
Inscription : 03-07-2012
Messages : 10

comment écrire un template xml?

Bonjour,
Je souhaite écrie une fonction me permettant de remplir un template *.xml. Mai j'ai des problème au niveau du passage de l'objet render_to_response. Bref voici mon code. En fait, je ne sais pas comment retourné un objet pouvant me permattre de compléter mon template automatiquement.
J'utilise django 1.1 et python 2.6
Fonction écrit dans le fichier views.py

def main_formation(request, formation_id):
    formations = Formation.objects.get(id=formation_id)
    variables = RequestContext(request, {
        'formations': formations
        })
    return render_to_response('saisie/formation.xml', variables)

Voici mon fichier template que je souhaite remplir

<cdm:CDM xmlns:cdm="http://cdm-fr.fr/2006/CDM-frSchema" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://cdm-fr.fr/2006/CDM-frSchema [url=http://cdm-fr.fr/2006/schemas/CDM-fr.xsd\]http://cdm-fr.fr/2006/schemas/CDM-fr.xsd\"[/url] language="fr-FR">

{% if formations %}
  <cdm:orgUnitName>
        <cdm:text language="fr-FR"> {{ formation.etablissement }} </cdm:text>
    </cdm:orgUnitName>
    <cdm:orgUnitAcronym>{{ formation.sigle }}</cdm:orgUnitAcronym>
    <cdm:contacts>
        <cdm:contactData>
            <cdm:adr>
                <cdm:locality>{{ formation.ville }} </cdm:locality>
                <cdm:country>{{ formation.pays }}</cdm:country>
            </cdm:adr>
        </cdm:contactData>                
    </cdm:contacts>

</cdm:CDM>
{% endif %}

Merci d'avance à toute personne pouvant me donné quelques indications.

Dernière modification par frncseric (04-07-2012 19:05:55)

Hors ligne

#2 04-07-2012 19:35:10

M. Namgyal Brisson
Membre
Inscription : 07-03-2012
Messages : 8

Re : comment écrire un template xml?

Bonsoir,

La fonction :

def main_formation(request, formation_id):
    formations = Formation.objects.get(id=formation_id)
    variables = RequestContext(request, {
        'formations': formations
        })
    return render_to_response('saisie/formation.xml', variables)

comporte à mon sens quelques erreurs!

la fonction, sauf erreur de ma part, 'render_to_response()' est mal
utilisée.

Elle prend les paramètres

1. template -> str

2. dictionnaire de données -> dict

3. (optionnel) le RequestContext ou le mime type

cf doc, qui est d'ailleurs très bien renseignée à ce sujet !!!

https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#django.shortcuts.render_to_response


Le 4 juil. 2012 19:42, "Eric Francis" <frncseric _AT_ gmail.com> a écrit :

> Bonjour,
> Je souhaite écrie une fonction me permettant de remplir un template xml.
> Mai j'ai des problème au niveau du passage de l'objet httpReponse. Bref
> voici mon ode
> Fonction écrit dans le fichier views.py
>
> [i]
> def main_formation(request, formation_id):
>     formations = Formation.objects.get(id=formation_id)
>     variables = RequestContext(request, {
>         'formations': formations
>         })
>     return render_to_response('saisie/formation.xml', variables)
> [/i]
>
> Voici mon fichier template que je souhaite remplir
>
> [i]
> <cdm:CDM xmlns:cdm="http://cdm-fr.fr/2006/CDM-frSchema"
>          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>          xsi:schemaLocation="http://cdm-fr.fr/2006/CDM-frSchema
> [url=
> http://cdm-fr.fr/2006/schemas/CDM-fr.xsd\]http://cdm-fr.fr/2006/schemas/CDM-fr.xsd\
> "[/url]
> language="fr-FR">[/i]
>
> [i]{% if formations %}
>   <cdm:orgUnitName>
>                 <cdm:text language="fr-FR">[b] {{ formation.etablissement
> }}[/b]
> </cdm:text>
>         </cdm:orgUnitName>
>         <cdm:orgUnitAcronym>[b]{{ formation.sigle
> }}[/b]</cdm:orgUnitAcronym>
>         <cdm:contacts>
>                 <cdm:contactData>
>                         <cdm:adr>
>                                 <cdm:locality>[b] {{ formation.ville
> }}[/b] </cdm:locality>
>                                 <cdm:country>[b] {{ formation.pays }}[/b]
> </cdm:country>
>                         </cdm:adr>
>                 </cdm:contactData>
>         </cdm:contacts>[/i]
>
> [i]</cdm:CDM>
> {% endif %}
> [/i]
> Merci d'avance à toute personne pouvant me donné quelques indications.
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#3 04-07-2012 20:09:50

frncseric
Membre
Inscription : 03-07-2012
Messages : 10

Re : comment écrire un template xml?

Salut M. Namgyal Brisson,
Merci pour votre réponse.

def main_formation(request, formation_id):
    formations = Formation.objects.get(id=formation_id)
     variables = RequestContext(request, {
        'formations': formations
         })
     return render_to_response('saisie/formation.xml', variables)

Dans mon code, la fonction return render_to_response('saisie/formation.xml', variables) n'est peut être pas appropriée car, sauf erreur de ma part, elle me semble bien utilisé parce que le 3ème paramètre est optionnel. Ici variable est bien un dictionnaire.
Néanmoins, quand je l'écrit ainsi

render_to_response('saisie/formation.xml', variables, mimetype="application/xhtml+xml")

j'obtiens mon fichier xml sans les valeurs attendues, je veux dire les valeurs qui devraient être ajouter dynamiquement.
Merci encore parce que l'ajout de ce paramètre optionnel m'a fait avancé un peu et j'espère trouver la solution ce problème qui me bloque déjà trop.

Hors ligne

#4 05-07-2012 08:34:01

FoxMaSk
Membre
Inscription : 11-08-2010
Messages : 23
Site Web

Re : comment écrire un template xml?

Bonjour
Le xml doit être un fichier génèré sur le file system ou juste accessible en http par une autre méthode ? Peut être que ça permettrait de vous aiguiller sur la bonne piste .
Cdt

Hors ligne

#5 05-07-2012 10:57:15

frncseric
Membre
Inscription : 03-07-2012
Messages : 10

Re : comment écrire un template xml?

Bonjour,
Merci à FoxMaSk pour sa réponse.
Mon fichier xml doit être accessible en thhp par une methode. Ce qui me permettra de compléter certain champs. Voici par exemple un fragment de mon fichier xml

<cdm:contacts>
        <cdm:contactData>
            <cdm:adr>
                <cdm:locality>{{ formation.ville }}</cdm:locality>
                <cdm:country>{{ formation.pays }}</cdm:country>
            </cdm:adr>
        </cdm:contactData>                
    </cdm:contacts>

Je souhaite remplir dynamiquement les champs {{ formation.ville }} {{ formation.pays }}.
Une fois que je pourrai remplir dynamiquement ces champs, je pourrai sauvegarder le fichier ou l'envoyer directement en sortie téléchargeable. Ma priorité est de remplir ces champs d'abord de façon dynamique.
J'ai esayé l'exemple donné par M. Namgyal Brisson, mais j'ai le fichier avec des champs non remplient.
Merci pour votre aide

Hors ligne

#6 05-07-2012 11:36:02

frncseric
Membre
Inscription : 03-07-2012
Messages : 10

Re : comment écrire un template xml?

Salut,
Merci pour votre aide. Je viens de résoudre le problème. La fonction

return render_to_response('myapp/index.html', {"foo": "bar"},
        mimetype="application/xhtml+xml")

marche bien. En fait, j'avais une erreur au niveau de mon query  qui ne retournait pas d'objets. Et du coup, mon dictionnaire était vide.
Je souhaite maintenant que ce fichier soit directement disponible en en sortir téléchargéable et c'est autre chose.
Merci pour toutes vos réponses.

Hors ligne

#7 06-07-2012 10:20:25

FoxMaSk
Membre
Inscription : 11-08-2010
Messages : 23
Site Web

Re : comment écrire un template xml?

Bonjour
Pour manipuler des fichiers XML, j'utilise LXML
http://lxml.de/tutorial.html
Notamment pour utiliser des expressions XPATH
Mais ca devrait aussi permettre de générer des fichiers comme bon vous
semble.
Cordialement.
Le jeu. 05 juil. 2012 12:36:02 CEST, Eric Francis a écrit :
> Salut,
> Merci pour votre aide. Je viens de résoudre le problème. La fonction
>

return render_to_response('myapp/index.html', {"foo": "bar"},
>          mimetype="application/xhtml+xml")

> marche bien. En fait, j'avais une erreur au niveau de mon query  qui ne
> retournait pas d'objets. Et du coup, mon dictionnaire était vide.
> Je souhaite maintenant que ce fichier soit directement disponible en en
> sortir téléchargéable et c'est autre chose.
> Merci pour toutes vos réponses.
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django



--
HaveFnuBB - Forum Open Source produit avec le framework Jelix PHP5 -
http://www.havefnubb.org
Jelix PHP5 Framework - http://jelix.org
Le Grin de Sable : http://www.foxmask.info

Hors ligne

#8 06-07-2012 13:15:56

frncseric
Membre
Inscription : 03-07-2012
Messages : 10

Re : comment écrire un template xml?

Bonjour,
Merci FoxMaSk pour le lien. Je n'ai pas assez de connaissances en python - xml. Je vais m'y mettre.
Merci

Hors ligne

Pied de page des forums