HTMLTags aneb jak vytvořit statickou HTML stránku

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.

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*>