2 | ||
Editor: pycz
Time: 2009/04/14 07:52:52 GMT+2 |
||
Note: |
changed: - Vytvoření statické webové stránky pomocí slovníku a šablony >> nedoporucil by mi nekdo nakej hezkej sablonovaci system pro webove aplikace? Nemyslim cely framework pro weby, ale jen a pouze HTML sablony ![...] Pokud to není na velké věci, pak možná stačí využít vlastností formátovacího řetězce a dosazování položek nachystaných ve slovníku takto: 1. Vyhradím si slovník, kde klíčem je zvolená zkratka a hodnotou požadovaná hodnota (pro parametrizaci šablony). 2. Do souboru si připravím šablonu dokumentu a v místech, kde se má něco dosazovat, uvedu například %(mujParametr)s. 3. Načtu soubor definující šablonu do řetězcové proměnné -- bude to formátovací řetězec. 4. Přes formátovací řetězec přepasíruji nachystaný slovník a výsledkem je řetězec, který zapíšu do výstupního souboru. Je to sice triviální a v této podobě bez jakékoliv diagnostiky, ale je to snadno pochopitelné a při minimálním úsilí asi poměrně výkonné. Není taky tak moc složité definovat si natvrdo šablonu pro záhlaví dokumentu a pro ukončení dokumentu. Pro generování jednotlivých prvků dokumentu si taky můžu definovat své funkce/metody objektů. Příklad: Soubor p.py:: # -*- coding: cp1250 -*- tpl_name = "sablona.tpl" out_name = "vystup.html" d = { 'title': 'Toto je titulek dokumentu', 'version': '3.0.1.256' } # Tady bude nějaký další kód... d['poznamka'] = u'Toto je nějaká moje poznámka' d['kun'] = u'Unicodový příšerně žluťoučký kůň, co úpěl ďábelské ódy.' # Načteme šablonu. f = file(tpl_name) sablona = f.read() f.close() # Dosadíme do šablony a výsledek zapíšeme do výstupního souboru. f = file(out_name, 'w') f.write(sablona % d) # Dosazení slovníku do šablony. f.close() # Spustím prohlížeč na výsledek. import webbrowser webbrowser.open(out_name) Soubor sablona.tpl:: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <link rel="stylesheet" type="text/css" href="tutor.css" > <link rel="stylesheet" type="text/css" href="colors.css" > <title>%(title)s</title> </head> <body> <h1>%(title)s -- použito podruhé</h1> <table summary="důležitá tabulka"> <tr><td>Verze:</td><td>%(version)s</td></tr> <tr><td>Jak je to s tím koněm?</td><td>%(kun)s</td></tr> </table> <p><b>Poznámka:</b> %(poznamka)s</p> </body> </html> Program versus data P.S. V programování existuje taky dualita: program versus data. Složitější logiku můžu zvládnout složitějším programem nebo složitějšími datovými strukturami. Šablonové systémy zjevně vkládají veškeré aplikační moudro do mocnějšího dosazovacího aparátu, aby uživatel zvládl vše definicí dat. V některých případech (a v Pythonu díky jeho stručnosti a pružnosti zvláště) může být jednodušší napsat si svůj kousek kódu, než studovat šablonový mechanismus, který napsal někdo jiný. Je to věc posouzení potřeb, dostupných nástrojů, zvážení toho, co budu potřebovat v blízké a vzdálenější budoucnosti (jestli se vyplatí studovat nějaký složitější systém) a zvolení vhodných kompromisů.
>> nedoporucil by mi nekdo nakej hezkej sablonovaci system pro webove aplikace? Nemyslim cely framework pro weby, ale jen a pouze HTML sablony [...]
pak možná stačí využít vlastností formátovacího řetězce a dosazování položek nachystaných ve slovníku takto:
Je to sice triviální a v této podobě bez jakékoliv diagnostiky, ale je to snadno pochopitelné a při minimálním úsilí asi poměrně výkonné.
Není taky tak moc složité definovat si natvrdo šablonu pro záhlaví dokumentu a pro ukončení dokumentu. Pro generování jednotlivých prvků dokumentu si taky můžu definovat své funkce/metody objektů.
Soubor p.py:
# -*- coding: cp1250 -*- tpl_name = "sablona.tpl" out_name = "vystup.html" d = { 'title': 'Toto je titulek dokumentu', 'version': '3.0.1.256' } # Tady bude nějaký další kód... d['poznamka'] = u'Toto je nějaká moje poznámka' d['kun'] = u'Unicodový příšerně žluťoučký kůň, co úpěl ďábelské ódy.' # Načteme šablonu. f = file(tpl_name) sablona = f.read() f.close() # Dosadíme do šablony a výsledek zapíšeme do výstupního souboru. f = file(out_name, 'w') f.write(sablona % d) # Dosazení slovníku do šablony. f.close() # Spustím prohlížeč na výsledek. import webbrowser webbrowser.open(out_name)
Soubor sablona.tpl:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <link rel="stylesheet" type="text/css" href="tutor.css" > <link rel="stylesheet" type="text/css" href="colors.css" > <title>%(title)s</title> </head> <body> <h1>%(title)s -- použito podruhé</h1> <table summary="důležitá tabulka"> <tr><td>Verze:</td><td>%(version)s</td></tr> <tr><td>Jak je to s tím koněm?</td><td>%(kun)s</td></tr> </table> <p><b>Poznámka:</b> %(poznamka)s</p> </body> </html>
P.S. V programování existuje taky dualita: program versus data. Složitější logiku můžu zvládnout složitějším programem nebo složitějšími datovými strukturami. Šablonové systémy zjevně vkládají veškeré aplikační moudro do mocnějšího dosazovacího aparátu, aby uživatel zvládl vše definicí dat. V některých případech (a v Pythonu díky jeho stručnosti a pružnosti zvláště) může být jednodušší napsat si svůj kousek kódu, než studovat šablonový mechanismus, který napsal někdo jiný. Je to věc posouzení potřeb, dostupných nástrojů, zvážení toho, co budu potřebovat v blízké a vzdálenější budoucnosti (jestli se vyplatí studovat nějaký složitější systém) a zvolení vhodných kompromisů.