IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Comment traiter les caractères > et < dans le traitement de chaînes de caractères (texte) ?


Sujet :

Django Python

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Comment traiter les caractères > et < dans le traitement de chaînes de caractères (texte) ?
    Bonjour,
    Grand débutant et utilisant très peu Python, je vais essayé de structurer ma question .
    J'utilise un vieux script pour créer un fichier.xml. En entrée j'ai un fichier de data (chaînes de cactères) et un template (utilisation de Django).Mon script répondait tout à fait à mes besoins tant que je n'avais pas décidé d'inclure les caractères < et > qui sont destinés à du markup dans un site (création d'une liste html)
    Donc, ma question est : comment éviter de transformer par exemple : < en &lt ?
    Apparemment mon problème se situe au moment ou les data sont traitées en utilisant le template (problème Python ou Django ?) . Voici un résumé de ce que j'ai (vue partielle du script avec affichage des chaînes de caractères obtenues à chaque étape)
    Merci de votre aide .
    ----------------------------------------------------------
    En entrée la chaîne de caractères manipulée :
    "<ul><li> Élement1 </li><li> élement2 </li></ul>"
    Résultat en sortie :
    "&lt;ul&gt;&lt;li&gt; Élement1 &lt;/li&gt;&lt;li&gt; élement2 &lt;/li&gt;&lt;/ul&gt;"
    Mon besoin en sortie :
    "<ul><li> Élement1 </li><li> élement2 </li></ul>"
    == Mon script ====
    import django

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    import django
    from django.conf import settings               
    from django.template import Template, Context   	
    DATA_FILE = 'input00.txt'
     
    a, b, c,d = 1, 1.65, 100,0
    ....
    ....
    DATA['myloops'] = list_dict
    print(DATA)	 		# display :  "<ul><li> Élement1 </li><li> élement2 </li></ul>" 
     
    with open('template00.xml', 'r') as f: 
        template_str = f.read()
     
    settings.configure()       	# Set-up Django before using its functionalities
    django.setup()
    t = Template(template_str) 	# Django Template object
    c = Context(DATA)     		# Django Context object
    final_xml = t.render(c)   	# returns a Python string
     
    print(final_xml)		# Display : "&lt;ul&gt;&lt;li&gt;  Élement1  &lt;/li&gt;&lt;li&gt; élement2  &lt;/li&gt;&lt;/ul&gt;
     
    with open('output00.xml', 'w', encoding='utf-8') as f:
     
        f.write(final_xml)		# in output file output00.xml : "&lt;ul&gt;&lt;li&gt;  Élement1  &lt;/li&gt;&lt;li&gt; élement2  &lt;/li&gt;&lt;/ul&gt;"
    -------------------------------------------------------------------------------

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Si on reformule votre soucis avec un exemple simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> from django.conf import settings
    >>> settings.configure()
    >>> from django.template import Context, Template
    >>> data =  "<ul> {{ message }} </ul>"
    >>> c = Context({'message': 'blabla'})
    >>> t.render(c)
    '<ul> blabla </ul>'
    Le problème a lieu lorsque le texte ('blabla') contient des caractères qu'il est nécessaire "d''échapper".
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> c = Context({'message': '<h>blabla</h>'})
    >>> t.render(c)
    '<ul> &lt;h&gt;blabla&lt;/h&gt; </ul>'
    car c'est ce que fait Django par défaut.
    Une solution est de lui demander de ne pas (avec l'option safe):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> data =  "<ul><li> {{ message|safe }} </ul>"
    >>> t = Template(data)
    >>> t.render(c)
    '<ul><li> <h>blabla</h> </ul>'
    >>>
    Pour les autres solutions, il faut prendre le temps de lire la documentation pour voir laquelle serait la plus adaptée à votre cas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Comment traiter les caractères accentués de mon store ?
    Par altair8080 dans le forum Ext JS / Sencha
    Réponses: 4
    Dernier message: 25/07/2012, 21h25
  2. Comment traiter les espaces dans le nom du fichier
    Par maban dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/08/2007, 20h25
  3. Réponses: 10
    Dernier message: 19/09/2005, 22h24
  4. [VB.NET] Page Edition, comment traiter les <br?
    Par zigoto dans le forum ASP.NET
    Réponses: 12
    Dernier message: 08/02/2005, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo