Szablony Mako w Pylons
14 July 2008
Comments
Pylons daje nam możliwość stosowania kilku systemów szablonów. Domyślny obecnie Myghty oraz kid, mako i genshi. Szablony Mako będą następcą Myghty w kolejnych wersjach frameworka i na przykładzie tego systemu szablonów pokażę jak zmienić we frameworku system szablonów (sposób identyczny dla całej trójki).Instalacja Mako
Instalacja jest prosta, poprzez setuptools. Wykonaj:easy_install Mako
Mako w Pylons
- Utwórz nowy projekt, ja użyłem nazwę "aplikacja"
paster create --template=pylons aplikacja
- Przejdź do katalogu projektu ("aplikacja") i uruchom serwer deweloperski:
paster serve --reload development.ini
- Utwórz kontroler aplikacja/aplikacja/controllers/test.py o kodzie:
from aplikacja.lib.base import *
class TestController(BaseController):
def index(self):
return render_response('/szablon.html')
- Utwórz szablon - aplikacja/aplikacja/templates/szablon.html o dowolnej tekście.
- Otwierając w przeglądarce adres http://localhost:5000/test/ powinieneś zobaczyć tekst z szablonu (ew. zrestartuj serwer).
- Powyższy kod pokazuje prosty kontroler korzystający z szablonu. Domyślny jest Myghty, lecz my teraz zmienimy ustawienia by korzystać z Mako.
Zmiana domyślnego systemu szablonów
- Otwórz NAZWA_PROJEKTU/NAZWA_PROJEKTU/config/middleware.py - w tym przykładzie aplikacja/aplikacja/config/middleware.py i znajdź wiersz z:
config.init_app(global_conf, app_conf, package='NAZWA_PROJEKTU')
- By zmienić ustawienia dotyczące systemu szablonów wystarczy dodać template_engine='NAZWA_SYSTEMU', gdzie nazwa może być "mako", "kid" czy "genshi"
- W naszym przypadku modyfikacja wygląda tak:
config.init_app(global_conf, app_conf, package='aplikacja', template_engine='mako')
Po zrestartowaniu serwera i odświeżeniu strony http://localhost:5000/test/ zobaczymy ten sam tekst, lecz teraz Mako a nie Myghty zajmuje się szablonami. Wystarczy zmodyfikować zawartość szablon.html na np.:
# -*- coding: utf-8 -*-
<h1>To jest Test łóężźńą</h1>
${c.zmienna}
<br /><br />
<%
rows = [[v for v in range(0,10)] for row in range(0,10)]
%>
<table>
% for row in rows:
${makerow(row)}
% endfor
</table>
<%def name="makerow(row)">
<tr>
% for name in row:
<td>${name}</td> % endfor
</tr>
</%def>
# -*- coding: utf-8 -*-
from aplikacja.lib.base import *
class TestController(BaseController):
def index(self):
c.zmienna = 'To jestśłółęążźń zmienna'.decode('utf-8')
return render_response('/szablon.html')
# -*- coding: utf-8 -*-
RkBlog
Comment article