Karrigell Documentation

Version 2.3.3 15 01 07

English

13. HTMLTags - génère du HTML en Python

Le module HTMLTags définit une classe pour toutes les balises HTML valides, écrites en majuscules. Pour créer un élément en HTML, la syntaxe générale est :

t = TAG(innerHTML, key1=val1,key2=val2,...)
de façon que print t donnera :

    <TAG key1="val1" key2="val2" ...>innerHTML</TAG>
Par exemple :
    print A('bar', href="foo")  ==>  <A href="foo">bar</A>

Pour générer des attibuts HTML sans valeur, donnez-leur la valeur True :

    print OPTION('foo',SELECTED=True,value=5)  ==>  <OPTION value="5" SELECTED>
Pour des balises sans fermeture telles que <IMG> ou <BR>, l'instruction print ne génère pas de balise fermante

L'argument innerHTML peut être une instance d'une classe HTML, on peut donc imbriquer des balises, de cette façon :

    print B(I('foo'))  ==>  <B><I>foo</I></B>

Les instances des classes HTML supportent l'addition :

    print B('bar')+INPUT(name="bar")  ==>  <B>bar</B><INPUT name="bar">

ainsi que la répétition :

    print TH('&nbsp')*3  ==>  <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>

Si vous avez une liste d'instances, vous ne pouvez pas concaténer les éléments avec sum(instanceList) parce que sum ne prend que des nombres comme arguments. Il y a donc une fonction appelée Sum qui fera l'affaire :

    Sum([ TR(TD(i)+TD(i*i)) for i in range(100) ])
génère les lignes d'un tableau qui montre les carrés des entiers de 0 à 99

L'argument innerHTML peut être une chaîne de caractères, mais on ne peut pas concaténer une chaîne et une instance d'une classe HTML, comme dans :

    H1('O rage ! ' + B('O désespoir !'))
Pour ceci, servez-vous d'une classe appelée TEXT, qui ne génèrera pas de balise :

    H1(TEXT('O rage !') + B('O désespoir !'))
Un document simple peut être produit par :

    print HTML( HEAD(TITLE("Document d'essai")) +
        BODY(H1("Ceci est un document d'essai")+
             TEXT('Première ligne')+BR()+
             TEXT('Deuxième ligne')))
Ce qui donne :

    <HTML>
    <HEAD>
    <TITLE>Document d'essai</TITLE>
    </HEAD>
    <BODY>
    <H1>Ceci est un document d'essai</H1>
    Première ligne
    <BR>
    Deuxième ligne
    </BODY>
    </HTML>
Si le document est plus complexe, il est plus lisible de créer d'abord les éléments, puis d'imprimer le résultat d'ensemble en une seule instruction. Par exemple :

    stylesheet = LINK(rel="Stylesheet",href="doc.css")
    header = TITLE('Collection de disques')+stylesheet
    titre = H1('Ma collection de disques')
    lignes = Sum ([TR(TD(disque.titre,Class="titre")+TD(disque.artiste,Class="Artiste")) 
        for disque in disques])
    table = TABLE(TR(TH('Titre')+TH('Artiste')) + lignes)
    print HTML(HEAD(header) + BODY(titre + table))