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 :

ordinal not in range


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
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Par défaut ordinal not in range
    Bonjour,

    Je veux faire une liste des fichiers qui sont contenu dans un certain répertoire
    J'ai donc :
    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
        ...
        path = PROJECT_PATH+"/links/"+offset+"/"
        if os.path.isdir(path):
            allFiles = os.listdir(path)
            dirList=[]
            fileList=[]
            for f in allFiles:
                    dictEntry={'path':"/"+offset+"/"+f,'name':f,'type':'unknown'}
     
                    if os.path.isdir(path+f) == True:
                        dictEntry['type']='folder'
                        dirList.append(dictEntry)
                    else:
                        dictEntry['type']='file'
                        fileList.append(dictEntry)
                        ...
    avec offset étant le chemin des sous-dossiers
    Ca marche impec sauf si j'ai un accent dans le nom du fichier, j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ('ascii', 'Monty Python Sacr\xc3\xa9 Graal !.avi', 17, 18, 'ordinal not in range(128)')
    je comptais le mettre dans le forum python mais en fait si je le fais via un shell ça fonctionne (il me convertit les accents en \xc3 machin) donc je suppose que ça doit venir de django

    ou en général quel est le meilleur moyen de gérer les caractères spéciaux (qui risquent de se retrouver dans une url). Par exemple je prévois que le '!' dans le titre va m'ennuyer aussi

    merci

    (pour l'instant j'ai entourer le tout d'un "try-except-pass" mais évidement c'est pas le top)

  2. #2
    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,

    le plus simple pour créer des url est d'utiliser la fonction slugify:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    In [1]: from django.template import defaultfilters
     
    In [2]: slug = defaultfilters.slugify("ceci est un test: é&àçôûù '([_\\@@@")
     
    In [3]: slug
    Out[3]: u'ceci-est-un-test-eacouu-_'
    tu peux aussi l'utiliser directement dans un template:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ mavariable|slugify }}

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 40
    Par défaut
    merci mais j'ai un problème avec cette solution

    Le but de l'application est de générer des pages html avec la liste et tout les fichiers contenus dans un certain répertoire et pouvoir les télécharger. Un peu comme sur un ftp en somme.
    Pour chaque fichier je fais un dictionnaire avec le nom et le chemin d'accès, ainsi j'ai dans mon template
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {% for key in file_list %}
        <li><a href="/files{{ key.path }}">{{ key.name }}</a></li>
    {% endfor %}
    Seulement si j'utilise slugify, "/abçd/éfg.txt" deviendra "/abcd/efg.txt" et donc je n'arriverai pas à récupérer le fichier, tout comme os.path.isdir("/abcd") me renverra 'False'

    C'est une bonne idée pour les url mais il faudrait que je trouve le moyen de garder le vrai non mémorisé quelque part alors

  4. #4
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Bonjours andtwoturtles,

    À mon avis, c’est encore un problème str/unicode (surement une “conversion” qui se fait mal quelque part…).

    Si je me souviens bien, django est maintenant “full unicode”, alors que dans ton code tu sembles utiliser des chaînes str (string, sur 8 bits).

    Donc, essaye voir si ton code de départ marche, une fois toutes les chaînes en unicode (pour rappel, pour créer une chaîne unicode, on utilise “u"foobar"”, avec le petit “u” juste avant le premier guillemet ; et pour convertir une chaîne string en unicode, il suffit de faire “unicode(the_string)”…)

    A+

    Bastien

Discussions similaires

  1. [Débutant] Value does not fall within the expected rang eerreur
    Par youssefcss dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 04/03/2015, 14h18
  2. Réponses: 2
    Dernier message: 13/02/2013, 12h44
  3. ClickOnce: Value does not fall within the expected range
    Par jubourbon dans le forum Visual Studio
    Réponses: 1
    Dernier message: 05/10/2012, 17h17
  4. Réponses: 4
    Dernier message: 14/04/2011, 16h32
  5. [SP-2010] erreur :Value does not fall within the expected range
    Par hassine dans le forum SharePoint
    Réponses: 1
    Dernier message: 01/07/2010, 10h17

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