RkBlog

Hardware, programming and astronomy tutorials and reviews.

Szablony Mako w Pylons

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>
Gdzie ${c.zmienna} to zmienna dodana do metody index naszego kontrolera:
# -*- 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')
Dodanie:
# -*- coding: utf-8 -*-
Do szablonu ustawia jego kodowanie na utf-8 (a nie ascii) przez co możemy spokojnie stosować polskie znaki (plik zapisujemy w kodowaniu utf-8). Składnią i możliwościami Mako zajmiemy się w oddzielnym artykule.
RkBlog

Pylons, 14 July 2008, Piotr Maliński

Comment article