Edit detail for VytvoreniWww-Slovnik revision 2 of 1

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ů.


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ů.