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

Réseau/Web Python Discussion :

[webpy] traitement des retours à la ligne dans une entrée utilisateur


Sujet :

Réseau/Web Python

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut [webpy] traitement des retours à la ligne dans une entrée utilisateur
    Bonjour,

    Je suis en train d'écrire une petite application web (pour gérer une liste de dépenses) en Python avec webpy et une base de donnée sqlite.

    En gros j'ai un code qui pour le moment ressemble à ça :

    ./argent.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import web
     
    urls = ('/', 'index')
    render = web.template.render('templates', globals={})
    db = web.database(dbn='sqlite', db='database.db')
     
    class index:
        def GET(self):
            list = db.select('argent')
            return render.argent(list)
    ./templates/argent.html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $def with (list)
    <table>
    $for row in list:
        <tr>
            <td>$row.quand</td>
            <td>$row.pourquoi</td>
            <td>$row.combien</td>
        </tr>
    </table>
    Le champ row.pourquoi peut contenir des retours à la ligne que j'aimerais remplacer par des <br/> mais je ne vois pas comment faire ça simplement.

    Lorsque j'essaye de faire un row.pourquoi.replace('\n', '<br/>') (aussi bien dans le code que le template) j'obtiens une erreur 'NoneType' object has no attribute 'replace'.

    Je sais que c'est un problème de débutant mais justement je débute (en fait j'apprend le Python par la même occasion).

    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Pour info, il existe le module Markdown qui est un convertisseur de text en html et qui permet de faire pas mal de choses.

    http://www.freewisdom.org/projects/python-markdown/

    Pour ce qui est de ton problème, il te suffit de lire le tutorial de Templator, le système de gabarit de webpy, tu y trouveras la solution.

    http://webpy.org/docs/0.3/templetor.fr

    Voici ton code que j'ai un peu modifié pour les tests, ça fonctionne chez moi :

    ./code.py

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    #!/usr/bin/env python
    #-*- coding: utf-8 -*-
     
    # Pour info, il existe le module Markdown qui permet de convertir du texte en html.
    # Pour installer Markdown:
    #	wget http://pypi.python.org/packages/source/M/Markdown/Markdown-2.0.tar.gz
    #	tar xvzf Markdown-2.0.tar.gz
    #	cd Markdown-2.0/
    #	sudo python setup.py install
     
     
    # --- SQLite
    import sqlite3
     
    class Mabase():
     
    	def __init__(self):
    		"""     
                            Pour effacer la base créée, il suffit de supprimer /tmp/mabase.db """
    		self.conn = sqlite3.connect('/tmp/mabase.db')
     
    	def creer(self):
    		"""     Créer une simple base à une table pour le test.
                            Renvoi True si reussie, False si déjà créée. """
    		# Obtention d'un curseur
    		c = self.conn.cursor()
    		try:
    			# Créer une table
    			c.execute('create table matable (id INTEGER PRIMARY KEY,nom VARCHAR(50), prenom VARCHAR(50))')
    			# Inserer deux lignes de données
    			c.execute('insert into matable values (null,"Dupont","Jean\nMichel")')
    			c.execute('insert into matable values (null,"Martin","Marie")')
    			# Sauvegarder les modifications
    			self.conn.commit()
    			# Fermer le curseur
    			c.close()
    			return True
    		except:
    			# Fermer le curseur
    			c.close()
    			return False
     
    # Cela créera la base au lancement du serveur
    mabase = Mabase()
    mabase.creer()
     
     
    #--- Webpy
    import web
     
    web.config.debug = False # Désactive le mode débuggage
     
    urls = (
        '/(.*)', 'hello'
    )
     
    app = web.application(urls, globals())
     
    # http://webpy.org/docs/0.3/templetor.fr
    render = web.template.render('templates', globals={})
     
    db = web.database(dbn='sqlite', db='/tmp/mabase.db')
     
     
    class hello:        
        def GET(self, name):    
    	web.header("Content-Type","text/html; charset=utf-8")  
            list = db.select('matable')	
    	return render.matable(list)
     
     
    if __name__ == "__main__":
        app.run()
    ./templates/matable.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $def with (list)
     
    <table>
    $for row in list:
        <tr>
            <td>$row.nom</td>
            <td>$:row.prenom.replace("\n","<br/>")</td>
        </tr>
    </table>
    Cordialement,

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci pour ta réponse.
    En fait j'avais déjà essayé de faire $:row.pourquoi.replace mais j'obtenais la même erreur.
    Mais finalement j'ai trouvé où est le problème et c'est vraiment tout bête : une des lignes de ma table contenait un champ 'pourquoi' mis à NULL, et donc quand je faisais row.pourquoi.replace il me disait logiquement que 'NoneType' object has no attribute 'replace'.

    Je marque le sujet en résolu.

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

Discussions similaires

  1. Supprimer des retour à la ligne dans une variable
    Par havany dans le forum Langage
    Réponses: 3
    Dernier message: 28/01/2010, 12h12
  2. [CSS] Empecher le retour à la ligne dans une cellule
    Par pekka77 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 26/02/2009, 16h50
  3. [VB.NET] Enlever les retours à la ligne dans une string
    Par adrix26 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/01/2007, 23h27
  4. Retour à la ligne dans une zone de text
    Par hnb2003 dans le forum Access
    Réponses: 2
    Dernier message: 13/04/2006, 11h56
  5. Pb retour de ligne dans une balise DT
    Par lord_paco dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/12/2005, 17h11

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