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 :

Fonction de réécriture / pb d'encodage


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut Fonction de réécriture / pb d'encodage
    Bonjour,

    Je suis en train d'écrire une petite fonction de réécriture mais j'ai un problème avec mes accents, la fonction me renvoie un string null...

    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
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    from django import template
     
    register = template.Library()
     
    @register.filter
    def rewrite(string):
    	string = string.lower().replace(' ', '-')
    	i = 0
    	old = ['à','á','â','ã','ä','å','ò','ó','ô','õ','ö','ø','è','é','ê','ë','ç','ì','í','î','ï','ù','ú','û','ü','ÿ','ñ']
    	new = ['a','a','a','a','a','a','o','o','o','o','o','o','e','e','e','e','c','i','i','i','i','u','u','u','u','y','n']
    	for letter in old:
    		string = string.replace(letter, new[i])
    		i += 1
    	return string
    Tout est en UTF-8, je ne vois pas d'où peut venir le problème
    Je débute avec python & Django, je ne suis pas encore très familier avec la gestion de l'encodage...

    J'ai cherché aussi si Django ne possédait pas de fonctions pour faire ça nativement mais en vain...

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Par défaut
    Bonjour,

    Chez moi, ta fonction marche. Je ne sais ce que fait @register.filter, essaye en enlevant la ligne.
    J'ai testé comme suit:
    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
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    def rewrite(string):
    	string = string.lower().replace(' ', '-')
    	i = 0
    	old = ['à','á','â','ã','ä','å','ò','ó','ô','õ','ö','ø','è','é','ê','ë','ç','ì','í','î','ï','ù','ú','û','ü','ÿ','ñ']
    	new = ['a','a','a','a','a','a','o','o','o','o','o','o','e','e','e','e','c','i','i','i','i','u','u','u','u','y','n']
    	for letter in old:
    		string = string.replace(letter, new[i])
    		i += 1
    	return string
     
    print rewrite("éàèî")
    Ta variable "i", est inutile, tu peux utiliser zip:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    def rewrite(string):
    	string = string.lower().replace(' ', '-')
    	old = ['à','á','â','ã','ä','å','ò','ó','ô','õ','ö','ø','è','é','ê','ë','ç','ì','í','î','ï','ù','ú','û','ü','ÿ','ñ']
    	new = ['a','a','a','a','a','a','o','o','o','o','o','o','e','e','e','e','c','i','i','i','i','u','u','u','u','y','n']
    	for o, n in zip(old, new):
    		string = string.replace(o, n)
     
    	return string
     
    print rewrite("éàèî")
    J'ai cherché aussi si Django ne possédait pas de fonctions pour faire ça nativement mais en vain...
    Django, je ne crois pas, mais python oui. Il y a le module unicodedata:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import unicodedata
     
    string = u"éàèî"
    string = string.lower().replace(' ', '-')
    newString = unicodedata.normalize('NFKD', string).encode('ASCII', 'ignore')
     
    print newString

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut
    Je ne sais ce que fait @register.filter, essaye en enlevant la ligne.
    En fait, je voulais utiliser cette fonction comme filtre dans le moteur de template, le "@register.filter" sert a ajouter ce filtre au filtres natifs de Django, je ne pense pas pouvoir l'enlever.

    J'ai essayé ma fonction directement dans ma vue, elle marche, je ne sais pas pourquoi ça ne marche pas dans le fichier de déclarations des filtres persos...

    Sinon, j'ai essayé ta fonction avec le module unicodedata, elle marche nickel, je vais la garder étant donné qu'elle beaucoup plus clean et courte

    Merci pour le "zip" aussi, j'aurais appris ça en bonus

  4. #4
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Bonjour,

    as-tu essayé slugify?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 18
    Par défaut
    Non Le pire, c'est que j'ai parcouru la liste des filtres quand je cherchais une solution à mon problème, je sais pas comment j'ai pû le louper...

    Je me disais bien aussi qu'avec tout ce que propose Django, il devait bien y avoir une fonction pour ça...

    Merci, je ferais plus attention la prochaine fois

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Recherche : Fonction open source pour l'encodage des accents ?
    Par polothentik dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/04/2008, 11h09
  2. [vbs] fonction encodage caractères
    Par philippe123 dans le forum VBScript
    Réponses: 2
    Dernier message: 24/08/2006, 11h24
  3. fonction native d'encodage utf8 ?
    Par Bruno2000 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/05/2006, 17h27
  4. Fonction encodage des retour chariot
    Par philippe123 dans le forum Langage
    Réponses: 2
    Dernier message: 20/05/2006, 15h57
  5. [VB6] fonction d' encodage URL en VB
    Par jeanseb dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/01/2003, 11h16

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