3 | ||
Editor: pycz
Time: 2009/04/14 08:01:09 GMT+2 |
||
Note: |
changed: - !"HTMLTags":http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/366000 aneb jak vytvořit statickou HTML stránku Na této stránce http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/366000 nebo <a href="HTMLTags.py">zde</a> si zkopírujte kód modulu a uložte pod jménem !HTMLTags.py. Pozor na velikosti písmen. Místa pro vhodné uložení jsou dvě. Buď v adresáři Lib/site-packages nebo přímo do adresáře, kde bude ležet váš skript. Použití Výtah z dokumentace přímo z modulu s malými změnami a doplňky. Modul !HTMLTags definuje třídy pro všechny HTML Tagy, bohužel velkými písmeny, což si však můžete přímo v kódu modulu změnit. Obecně se tag vytváří takto:: t = TAG(innerHTML, key1=val1,key2=val2,...) takže "print t" vytiskne:: <TAG key1="val1" key2="val2" ...>innerHTML</TAG> Například:: from HTMLTags import * t= A('katalog', href="foo") print t # ==> <A href="foo">katalog</A> Proměnná t není text, ale instance objektu, která má svoje metody (viz objektové programování v Pythonu). I když "print t" vypadá, jako když to text je. Je to právě způsobeno metodou __str__() ve třídě TAG... Že je to skutečně instance zjistíte takto:: print repr(t) # ==> <HTMLTags.A instance at 0x00935B20> # nebo t=t+'ahoj' # to způsobí chybu, protože chceme sčítat hrušky a jablka (instance a text) # pokud to opravdu pořebuje, použijeme pomocny tag TEXT: t=t+TEXT('ahoj') Argument tagu může být jiný tag, takže můžeme tagy zanořovat do sebe:: print B(I('foo')) ==> <B><I>foo</I></B> Sčítání:: print B('bar')+INPUT(name="bar") ==> <B>bar</B><INPUT name="bar"> První funkční příklad :: # -*- coding: cp1250 -*- import HTMLTags as H # abychom nemuseli všude psát HTMLTags, ale stačilo H # dejte pozor, nikde pak nesmíte použít H jako proměnnou (například H=12) hlavicka=H.HEAD(H.TITLE('Můj druhý HTML text')) telo=H.BODY(H.H1('Toto je test')+ H.TEXT('První řádka')+H.BR()+ H.TEXT('Druhá řádka')) stranka= H.HTML(hlavicka+telo) nazevHTML='MojeDruheHtml.html' ulozeno=file(nazevHTML,'w') ulozeno.write(stranka.__str__()) # nestačí jako argument použít 'stranka' # je třeba 'jinak a lépe' zavolat print ulozeno.close() print unicode(stranka.__str__(),'cp1250') # kvuli češtině opět bohužel nestačí print stranka import webbrowser webbrowser.open(nazevHTML) Výstup z programu:: <HTML> <HEAD> <TITLE> Můj druhý HTML text </TITLE> </HEAD> <BODY> <H1> Toto je test </H1> První řádka<BR> Druhá řádka ./BODY> # misto leve ostre zavorky je tecka, protoze wiki to brala jako skutecny konec stranky :-( ./HTML> Tabulky a CSS:: stylesheet = H.LINK(rel="Stylesheet",href="doc.css") radkyTabulky=H.TEXT() # inicializace proměnné for i in range(10): radkyTabulky=radkyTabulky+H.TR(H.TD(i)+H.TD(i*i)) stranka=H.HTML(H.HEAD(stylesheet)+H.BODY(H.TABLE(radkyTabulky)))<*/kod*>
Na této stránce http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/366000 nebo zde si zkopírujte kód modulu a uložte pod jménem HTMLTags.py. Pozor na velikosti písmen. Místa pro vhodné uložení jsou dvě. Buď v adresáři Lib/site-packages nebo přímo do adresáře, kde bude ležet váš skript.
Výtah z dokumentace přímo z modulu s malými změnami a doplňky.
Modul HTMLTags definuje třídy pro všechny HTML Tagy, bohužel velkými písmeny, což si však můžete přímo v kódu modulu změnit. Obecně se tag vytváří takto:
t = TAG(innerHTML, key1=val1,key2=val2,...)
takže "print t" vytiskne:
<TAG key1="val1" key2="val2" ...>innerHTML</TAG>
Například:
from HTMLTags import * t= A('katalog', href="foo") print t # ==> <A href="foo">katalog</A>
Proměnná t není text, ale instance objektu, která má svoje metody (viz objektové programování v Pythonu). I když "print t" vypadá, jako když to text je. Je to právě způsobeno metodou __str__() ve třídě TAG... Že je to skutečně instance zjistíte takto:
print repr(t) # ==> <HTMLTags.A instance at 0x00935B20> # nebo t=t+'ahoj' # to způsobí chybu, protože chceme sčítat hrušky a jablka (instance a text) # pokud to opravdu pořebuje, použijeme pomocny tag TEXT: t=t+TEXT('ahoj')
Argument tagu může být jiný tag, takže můžeme tagy zanořovat do sebe:
print B(I('foo')) ==> <B><I>foo</I></B>
Sčítání:
print B('bar')+INPUT(name="bar") ==> <B>bar</B><INPUT name="bar">
# -*- coding: cp1250 -*- import HTMLTags as H # abychom nemuseli všude psát HTMLTags, ale stačilo H # dejte pozor, nikde pak nesmíte použít H jako proměnnou (například H=12) hlavicka=H.HEAD(H.TITLE('Můj druhý HTML text')) telo=H.BODY(H.H1('Toto je test')+ H.TEXT('První řádka')+H.BR()+ H.TEXT('Druhá řádka')) stranka= H.HTML(hlavicka+telo) nazevHTML='MojeDruheHtml.html' ulozeno=file(nazevHTML,'w') ulozeno.write(stranka.__str__()) # nestačí jako argument použít 'stranka' # je třeba 'jinak a lépe' zavolat print ulozeno.close() print unicode(stranka.__str__(),'cp1250') # kvuli češtině opět bohužel nestačí print stranka import webbrowser webbrowser.open(nazevHTML)
Výstup z programu:
<HTML> <HEAD> <TITLE> Můj druhý HTML text </TITLE> </HEAD> <BODY> <H1> Toto je test </H1> První řádka<BR> Druhá řádka ./BODY> # misto leve ostre zavorky je tecka, protoze wiki to brala jako skutecny konec stranky :-( ./HTML>
Tabulky a CSS:
stylesheet = H.LINK(rel="Stylesheet",href="doc.css") radkyTabulky=H.TEXT() # inicializace proměnné for i in range(10): radkyTabulky=radkyTabulky+H.TR(H.TD(i)+H.TD(i*i)) stranka=H.HTML(H.HEAD(stylesheet)+H.BODY(H.TABLE(radkyTabulky)))<*/kod*>