|
|||||||||||||||||||||
1. Introduction
2. Installation 3. Le serveur Web 4. Options de configuration 5. Travailler avec Apache, LightTPD ou Xitami 6. Programmation 7. Debogage 8. Scripts Python 9. Services Karrigell 10. Python Inside HTML 10.1 Variables Python 10.2 Chaînes de caractères à traduire 10.3 Indentation 10.4 PIH comme système de templates 10.5 Débogage 11. HTML Inside Python 12. HTMLTags - génère du HTML en Python 13. Inclure des documents 14. Sessions 15. Authentification 16. Traduction et Unicode |
10. Python Inside HTMLPython Inside HTML se comporte de façon très proche des Active Server Pages de Microsoft, des Java Server Pages et de PHP : il s'agit à la base d'un document HTML, dans lequel on insère des portions de code écrites dans un langage de programmation - ici Python Dans Python Inside HTML, ces portions de code sont séparées du code HTML à l'intérieur de balises spéciales : <% et %> Supposons que vous vouliez afficher la date courante, vous mêlerez du HTML et du code Python de cette façon :
Avec un éditeur de texte, écrivez le code ci-dessus et sauvegardez-le sous date.pih dans votre Répertoire Racine . Entrez http://localhost/date.pih et voyez ce qui se passe Vous aurez remarqué que le code à l'intérieur des balises 10.1 Variables PythonSi vous voulez seulement imprimer la valeur d'une variable, au lieu de
os : par commodité, il est déjà dans
l'espace de noms quand vous exécutez le script ; ainsi que deux autres
modules, string et Cookie , parce que vous en aurez
sûrement besoin dans beaucoup de scripts (mais bien sûr, si vous écrivez
explicitement import string votre script fonctionnera aussi bien)
10.2 Chaînes de caractères à traduireComme l'internationalisation est importante dans Karrigell, il existe un raccourci pour les chaînes littérales ou les variables de type chaîne que vous voudrez traduire selon les préférences de l'utilisateur : utilisez<%_ chaine %>
Si vous avez préparé une traduction pour la chaîne Voir le support de Karrigell pour l'internationalisation 10.3 IndentationLe résultat du traitement d'un fichier PIH est du code Python : ce code doit être indenté. Comme un script PIH est un mélange de HTML, dans lequel l'indentation ne sert à rien d'autre qu'à la lisibilité, et de morceaux de code Python, il se peut qu'il soit difficile de produire un code qui soit à la fois lisible et correctement indenté 10.3.1 BasesPythonInsideHTML suit des règles simples :
Un simple exemple sur des conditions :
et une boucle
Sans cette balise Un dernier avec deux niveaux d'indentation
Noter qu'après la 1ère ligne il faut impérativement fermer la balise %>, sinon après la deuxième l'indentation ne sera que de 1 10.3.3 La balise
Pour du code plus long ou plus complexe, l'utilisation de |
# indentation |
|
<indent> <% if hour<18: %> Bonjour <% else: %> Bonsoir Mesdames et Messieurs </indent> |
# 0 # 0 # 1 # 0 # 1 # 0 # 0 |
Le deuxième :
# indentation |
|
<table border=1> <tr> <th>Nombre</th> <th>Carré</th> </tr> <indent> <% for i in range(10): %> <tr> <td><% print i %></td> <td><% print i**2 %></td> </tr> </indent> </table> |
# 0 # 0 # 0 # 0 # 0 # 0 # 0 (A) # 1 # 1 # 1 # 1 # suivante : 0 # 0 |
Sur la ligne notée (A) ci-dessus vous voyez que l'indentation de la ligne
est relative à celle de la balise <indent>
Notez aussi qu'après une partie indentée (après la balise
</indent>
) l'indentation revient à zéro
Un exemple avec des boucles imbriquées :
<indent> <table border=1> <% for i in ['h']+range(10): %> <tr> <% for j in ['h']+range(10): %> <% if i!='h' and j!='h': %> <td><%= i*j %></td> <% elif i!='h': %> <th><%= i %></th> <% elif j!='h': %> <th><%= j %></th> <% else: %> <td>*</td> </tr> </table> </indent>
Par exemple, cette documentation HTML est produite à partir de scripts PIH. Le numéro de chapitre n'est pas fixe, mais inséré de cette façon :
<h1><%= chapter %>. Python Inside HTML</h1>
Pour produire du HTML à partir d'un script PIH script, servez-vous du
module Template
, créez une instance de Script avec la fonction
getScript(nomFichier)
, puis appliquez-lui la
méthode render(espaceDeNoms)
, en lui passant l'espace
de noms dans lequel il trouvera les variables requises (en général
globals()
ou locals()
). render
retourne une
instance de Output, dont l'attribut value
donne le résultat en
HTML. Ici :
import Template entree=Template.getScript("pythoninsidehtml.pih") chapter=5 sortieHtml=entree.render(globals()).value
PIHapp.py
. C'est une petite application qui
montre comment les fichiers PIH sont traduits en scripts Python. Le résultat du script peut être
sauvegardé dans un fichier HTML et montré dans un navigateur, s'il n'appelle pas de variable
externe. La syntaxe est colorée