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 :

fomatage avec fichier html


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut fomatage avec fichier html
    Salut les web pythons,
    Je développe un site avec le mod_python de apache et je rencontre ma première difficultée:
    Je désire ouvrir un fichier html et écrire dedans avec des formatages du type:
    %(variable)s
    compris dans le fichier html.
    par exemple:
    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
     
    a='''<!DOCTYPE html>
    <html lang='fr'>
    <head>
    <title>test</title>
    <meta charset='utf-8'>
    <style>
    body {background-color: black; color: red; text-align:center;} 
    h1 {border: 15px red outset; margin-left:auto; margin-right: auto; width:1024px;}
    p {border: 5px red ridge; margin-left:auto; margin-right: auto; padding: 5px;width:1024px;}
    </style>
    </head>
    <body>
    <p>Ligne numéro %s</p>
    <p>Ligne numéro %s</p>
    <p>Ligne numéro %s</p>
    <p>Ligne numéro %s</p>
    <p>Ligne numéro %s</p>
    <p>Ligne numéro %s</p>
    <p>Ligne numéro %s</p>
    <p>Ligne numéro %s</p>
    </body>
    </html>'''
    print a % 'un','deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit'
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    TypeError: not enough arguments for format string
    sa ne marche pas d'accord, essayont autrement:
    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
     
    a='''<!DOCTYPE html>
    <html lang='fr'>
    <head>
    <title>test</title>
    <meta charset='utf-8'>
    <style>
    body {background-color: black; color: red; text-align:center;} 
    h1 {border: 15px red outset; margin-left:auto; margin-right: auto; width:1024px;}
    p {border: 5px red ridge; margin-left:auto; margin-right: auto; padding: 5px;width:1024px;}
    </style>
    </head>
    <body>
    <p>Ligne numéro %(un)s</p>
    <p>Ligne numéro %(deux)s</p>
    <p>Ligne numéro %(trois)s</p>
    <p>Ligne numéro %(quatre)s</p>
    <p>Ligne numéro %(cinq)s</p>
    <p>Ligne numéro %(six)s</p>
    <p>Ligne numéro %(sept)s</p>
    <p>Ligne numéro %(huit)s</p>
    </body>
    </html>'''
    print a % {'un':'un','deux':'deux', 'trois':'trois', 'quatre': 'quatre', 'cinq':'cinq', 'six': 'six', 'sept':'sept', 'huit':'huit'}
    <!DOCTYPE html>
    <html lang='fr'>
    <head>
    <title>test</title>
    <meta charset='utf-8'>
    <style>
    body {background-color: black; color: red; text-align:center;}
    h1 {border: 15px red outset; margin-left:auto; margin-right: auto; width:1024px;}
    p {border: 5px red ridge; margin-left:auto; margin-right: auto; padding: 5px;width:1024px;}
    </style>
    </head>
    <body>
    <p>Ligne numéro un</p>
    <p>Ligne numéro deux</p>
    <p>Ligne numéro trois</p>
    <p>Ligne numéro quatre</p>
    <p>Ligne numéro cinq</p>
    <p>Ligne numéro six</p>
    <p>Ligne numéro sept</p>
    <p>Ligne numéro huit</p>
    </body>
    </html>
    Parfait sa marche seulement avec un fichier HTML plus conséquent sa bug en me disant:
    Traceback (most recent call last):
    File "<input>", line 1, in <module>
    TypeError: not enough arguments for format string

    On peut essayer:
    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
     
    un='un'
    deux='deux'
    trois='trois'
    quatre='quatre'
    cinq='cinq'
    six='six'
    sept='sept'
    huit='huit'
    a='''<!DOCTYPE html>
    <html lang='fr'>
    <head>
    <title>test</title>
    <meta charset='utf-8'>
    <style>
    body {background-color: black; color: red; text-align:center;} 
    h1 {border: 15px red outset; margin-left:auto; margin-right: auto; width:1024px;}
    p {border: 5px red ridge; margin-left:auto; margin-right: auto; padding: 5px;width:1024px;}
    </style>
    </head>
    <body>
    <p>Ligne numéro %(un)s</p>
    <p>Ligne numéro %(deux)s</p>
    <p>Ligne numéro %(trois)s</p>
    <p>Ligne numéro %(quatre)s</p>
    <p>Ligne numéro %(cinq)s</p>
    <p>Ligne numéro %(six)s</p>
    <p>Ligne numéro %(sept)s</p>
    <p>Ligne numéro %(huit)s</p>
    </body>
    </html>'''
    print a % vars()
    <!DOCTYPE html>
    <html lang='fr'>
    <head>
    <title>test</title>
    <meta charset='utf-8'>
    <style>
    body {background-color: black; color: red; text-align:center;}
    h1 {border: 15px red outset; margin-left:auto; margin-right: auto; width:1024px;}
    p {border: 5px red ridge; margin-left:auto; margin-right: auto; padding: 5px;width:1024px;}
    </style>
    </head>
    <body>
    <p>Ligne numéro un</p>
    <p>Ligne numéro deux</p>
    <p>Ligne numéro trois</p>
    <p>Ligne numéro quatre</p>
    <p>Ligne numéro cinq</p>
    <p>Ligne numéro six</p>
    <p>Ligne numéro sept</p>
    <p>Ligne numéro huit</p>
    </body>
    </html>
    Ca marche aussi mais même traceback pour mon fichier HTML plus conséquent:
    Traceback (most recent call last):
    File "<input>", line 1, in <module>
    TypeError: not enough arguments for format string


    Je suppose que dans mon fichier HTML il y a d'autres signe '%' représentant des pourcentage afin de définir la taille d'un objet HTML qui sont interpréter par python comme des variables du type:
    %(variable)s

    Et je ne sais pas comment m'en sortir si quelqu'un comprend mon problème et a une solution a me donner il serai sympa de poster, ou si quelqu'un connait un module afin d'incorporer de manière dynamique des données texte dans un fichier HTML il serai sympa de poster, ou connait une autre technique de formatage il serai également sympa de poster, bref toutes, suggestion, commentaire, critique et solution sont la bienvenue.
    Sur ce problème bon python a vous.
    Merci pour vos réponses.
    PS: pour info je tourne en 2.6.5 et non pas en python 3 qui dispose également, pour information, d'un module python pour apache.

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Problème facile à résoudre: il faut utiliser la méthode 'format' apparue avec Python 2.6. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print "vhfdhfdv{0}hvbhfbvh{1}vhfdvhfrv{2}".format('X', 'Y', 'Z')
    vhfdhfdvXhvbhfbvhYvhfdvhfrvZ
    Dans les '{}', Les indices 0,1,2 étaient nécessaires en Python 2.6. On peut les omettre en Python 2.7.

    Il y a bien sûr toutes les possibilités de formatage des données: voir la doc.

  3. #3
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Merci pour la réponse mais est-ce-que ca marche pour dans un fichier html volumineux:
    Python ne va t'il pas interpréter les { } du CSS,posant les mêmes problèmes comme j'ai supposer pour le %(var)s avec les pourcentages?
    Manque de chance je suis sous 2.6.5 pour cause de LTS Ubuntu et j'ai lu la doc et bien compris la syntaxe avec les indices:
    Extrait de la doc officielle:
    format(value, [format_spec])
    Convert a value to a “formatted” representation, as controlled by format_spec. The interpretation of for-
    mat_spec will depend on the type of the value argument, however there is a standard formatting syntax that
    is used by most built-in types: Format Specification Mini-Language.
    Note: format(value, format_spec) merely calls value.__format__(format_spec).
    New in version 2.6.
    Et la syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "je comprend le {0}{1}{2}{3}{4}".format('formatage',' de',' la',' primitive',' format')
    Est juste en python 2.6.5.
    Il faut voir maintenant si le fichier HTML ne pose pas de problème, je vous dirai ca.
    Merci tyrtamos et pour vos réponses.

  4. #4
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Bon résultat du traitement du fichier HTML: mes suppositions étaient fondé bug a la première déclaration CSS.
    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
    a='''<!DOCTYPE html>
    <html lang='fr'>
    <head>
    <title>test</title>
    <meta charset='utf-8'>
    <style>
    body {background-color: black; color: red; text-align:center;} 
    h1 {border: 15px red outset; margin-left:auto; margin-right: auto; width:1024px;}
    p {border: 5px red ridge; margin-left:auto; margin-right: auto; padding: 5px;width:1024px;}
    </style>
    </head>
    <body>
    <p>Ligne numéro {0}</p>
    <p>Ligne numéro {1}</p>
    </body>
    </html>'''
    print a.format('un', 'deux')
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    KeyError: 'background-color'
    Dommage, heureusement que j'avais un plan B beaucoup moins élégant certes mais qui fonctionne.
    Bon merci d'avoir essayer de m'aider.
    Si vous avez d'autres solutions merci de poster.
    Merci pour vos réponses.

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Heureusement, il y a plein de choses intéressantes dans la notice, et en particulier: " If you need to include a brace character in the literal text, it can be escaped by doubling: {{ and }}."

    Application:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print "vhfd{{toto}}hfdv{0}hvbhfbvh{1}vhfdvhfrv{2}".format('X', 'Y', 'Z')
    vhfd{toto}hfdvXhvbhfbvhYvhfdvhfrvZ
    Avec un texte html, à paramétrer, il faudrait commencer par doubler en automatique tous les '{' et '}' (avec replace par exemple), puis insérer les '{i}' du format.

  6. #6
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Je ne comprends pas doubler les accolades du CSS ou du formatage, je vais jeter un oeil plus précis sur la doc, j'ai pas vraiment fait attention puisque mon plan B marche, je cherchais juste une solution plus élégantes, je vais m'y atteler. Merci pour l'info.

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

Discussions similaires

  1. mail avec fichier html joint
    Par allstar dans le forum Général Java
    Réponses: 1
    Dernier message: 25/01/2008, 08h33
  2. [SQL] Modifier un fichier HTML statique en cache avec rename()
    Par warpyou dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/09/2006, 10h32
  3. génrer fichier html avec template
    Par ramir dans le forum Langage
    Réponses: 5
    Dernier message: 19/10/2005, 13h30
  4. Réponses: 2
    Dernier message: 18/07/2005, 11h58

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