Suite et évolution du script sur http://flibuste.net/pythreries/templython
Code Template
Incorporation de code python dans une page HTML, style PHP,ASP ou JSP.
L'idée est de transformer une page HTML en un script Python qui pourra être facilement importable (et donc bytecompilé)
Format du template :
pour insérer du code python <py>code_python</py> pour afficher à partir du code python : _out += "chaine à afficher" pour utiliser une variable globale : glob.nom_de_la_variable pour afficher directement une variable <py>=nom_de_la_variable</py>
Le compilateur :
LICENCE GPL pour tout les codes de cette page #!/usr/bin/python def compiler(file,cible="."): """ compile le fichier file, retourne le résultat (près à être exécuté), et l'enregistre éventuellement dans le répertoire cible""" f=open(file) res=f.read() id_py_fin=0 _out="# Fichier auto-généré\n" _out+="def run(glob=None):\n _out=''" while 1: id_py=res.find("<py>",id_py_fin) if id_py==-1: break _out+='\n _out+="""%s"""\n'%(res[id_py_fin:id_py]) id_py+=4 id_py_fin=res.find("</py>",id_py) if id_py_fin==-1: break if res[id_py]=="=": _out+="\n _out+=str("+res[id_py+1:id_py_fin]+")" else: _out+=" "+res[id_py:id_py_fin].replace("\n","\n ") id_py_fin+=5 if id_py_fin>0: _out+= '\n _out+="""%s"""\n'%(res[id_py_fin:]) else: _out=res _out+="\n return _out" if cible!=None: import os import os.path file=os.path.basename(file) file=os.path.splitext(file)[0] f=open(cible+os.sep+file+".py","w") f.write(_out) f.close() return _out def compilerDir(dir): """ compile un répertoire entier""" _out="" import os for file in os.listdir(dir): if file[-5:]==".html": _out+=file+"\n" file=os.path.join(dir,file) if os.path.isfile(file): compiler(file,dir) return _out
un exemple de template :
<html> <body> Coucou ! <py> for i in range(10): _out+=str(i) </py> i=<py>=i</py> Variable globale g=<py>=glob.g</py> fonction globale f=<py>=glob.foo()</py> </body></html>
le script qui va importer ce template :
class glob: g="Je suis une variable globale" def foo(self): return "je suis une fonction globale" import test print test.run(glob())
et finalement, le résultat :
<html> <body> Coucou ! 0123456789 i=9 Variable globale g=Je suis une variable globale fonction globale f=je suis une fonction globale </body></html>