<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jaros&#322;aw Zabie&#322;&#322;o - BLOG: Szablony i wzorzec MVC - cz. III</title>
    <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>Szablony i wzorzec MVC - cz. III</title>
      <description>&lt;p&gt;W &lt;a href="http://blog.zabiello.com/articles/2007/01/06/templates-and-mvc-2"&gt;poprzedniej cz&#281;&#347;ci&lt;/a&gt; om&#243;wiono szablony dedykowane g&#322;&#243;wnie do wsp&#243;&#322;pracy z designerami boj&#261;cymi si&#281; programowa&#263;. By&#322;y to albo szablony wk&#322;adaj&#261;ce swoj&#261; logik&#281; do znacznik&#243;w &lt;span class="caps"&gt;XML&lt;/span&gt;/XHTML (ZPT, SimpleTAL, Kid, Genshi, MasterView, &lt;span class="caps"&gt;PHP TAL&lt;/span&gt;), albo szablony posiadaj&#261;ce sw&#243;j w&#322;asny, specjalizowany j&#281;zyk (Smarty, Django, Jinja, Liquid). W za&#322;o&#380;eniu taki j&#281;zyk mia&#322; by&#263; prostym substytutem j&#281;zyka u&#380;ywanego w warstwie kontrolera. Szablony tego typu mo&#380;e s&#261; wygodne dla designera, ale na pewno nie dla programisty, kt&#243;ry musi je &lt;strong&gt;przygotowa&#263;&lt;/strong&gt;. Po pierwsze, trzeba si&#281; uczy&#263; kolejnego j&#281;zyka&amp;#8230; szablon&#243;w. Po drugie, wszystkie tego typu j&#281;zyki s&#261; ograniczaj&#261;ce dla programisty. Mimo &#380;e pozornie prostsze, w praktyce s&#261; bardziej z&#322;o&#380;one i to nawet dla designera. Np. szablony Django i Jinja nie posiadaj&#261; &#380;adnej sk&#322;adni na okre&#347;lenie trywialnego warunku wi&#281;kszo&#347;ci, mniejszo&#347;ci:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_django "&gt;{{ x }} jest 
{% if x &amp;gt; y %} 
    wi&#281;ksze 
{% else %} 
    mniejsze 
{% endif %} 
od {{ y }}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Powoduje to mas&#281; k&#322;opot&#243;w dla programisty&lt;sup&gt;&lt;a href="#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;. Prymitywna sk&#322;adnia szablonu wymusza wi&#281;c kup&#281; dodatkowej pracy. O ile&#380; pro&#347;ciej jest u&#380;y&#263; po prostu pe&#322;nej sk&#322;adni j&#281;zyka tak jak to robi&#261; szablony Cheetah:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_cheetah "&gt;$x jest 
# if x &amp;gt; y 
    wi&#281;ksze 
# else 
    mniejsze 
# endif  
od $y&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Dochodzimy tu wi&#281;c do sytuacji kiedy by&#347;my chcieli co&#347; bardziej elastycznego &amp;#8211; pe&#322;nego dost&#281;pu do j&#281;zyka programowania. Taka sytuacja jest po&#380;&#261;dana wtedy kiedy i tak szablony buduj&#261; programi&#347;ci na podstawie dostarczonego czystego kodu &lt;span class="caps"&gt;HTML&lt;/span&gt; od designer&#243;w.&lt;/p&gt;


	&lt;h2&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt;&lt;/h2&gt;


	&lt;p&gt;J&#281;zyk &lt;span class="caps"&gt;PHP&lt;/span&gt; jest dosy&#263; specyficzny, bo w istocie jest to j&#281;zyk szablon&#243;w. Tzn. pierwotnie tak zosta&#322; stworzony, ale z czasem si&#281; skomplikowa&#322; &#380;e dost&#261;pi&#322; miana j&#281;zyka skryptowego. Ale jego korzenie wida&#263; w sk&#322;adni, kt&#243;ra z definicji jest zagnie&#380;d&#380;aniem instrukcji &lt;span class="caps"&gt;PHP&lt;/span&gt; wewn&#261;trz kodu &lt;span class="caps"&gt;HTML&lt;/span&gt;. Id&#261;c tym tropem, niekt&#243;rzy pomy&#347;leli, &#380;e nie ma sensu wymy&#347;la&#263; dodatkow&#261; sk&#322;adni&#281;. Wystarczy u&#380;y&#263; &lt;span class="caps"&gt;PHP&lt;/span&gt; w odpowiedni spos&#243;b. I tak powsta&#322;y szablony &lt;a href="http://phpsavant.com/yawiki/"&gt;&lt;strong&gt;Savant&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;W&#322;a&#347;ciwie to Savant nie powinny nazywa&#263; si&#281; szablonami, bo to nic innego jak &lt;span class="caps"&gt;PHP&lt;/span&gt; u&#380;yty w taki spos&#243;b, aby rozdzieli&#263; warstw&#281; prezentacji, od wartwy logiki biznesowej. A skoro to &lt;span class="caps"&gt;PHP&lt;/span&gt;, to odpada nauka dodatkowej sk&#322;adni oraz potrzeby kompilacji specjalizowanego j&#281;zyka szablon&#243;w do ko&#324;cowego kodu &lt;span class="caps"&gt;PHP&lt;/span&gt; (jak to ma miejsce w szablonach &lt;a href="http://smarty.php.net"&gt;Smarty&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;Czy takie podej&#347;cie jest lepsze, czy gorsze, to ju&#380; ka&#380;dy mo&#380;e sobie oceni&#263;. Moim zdaniem &lt;span class="caps"&gt;PHP&lt;/span&gt; ma na tyle m&#281;tn&#261; sk&#322;adni&#281;, &#380;e warstwa prezentacji u&#380;ywaj&#261;ca Smarty&lt;sup&gt;&lt;a href="#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt; jest bardziej czytelna ni&#380; czysty &lt;span class="caps"&gt;PHP&lt;/span&gt; jaki u&#380;ywaj&#261; Savant.&lt;/p&gt;


	&lt;h2&gt;Ruby&lt;/h2&gt;


	&lt;p&gt;Kiedy m&#243;wimy o Ruby w kontek&#347;cie stron internetowych to najcz&#281;&#347;ciej mamy na my&#347;li jego najs&#322;ynniejszy framework &amp;#8211; &lt;a href="http://rubyonrails.org"&gt;Rails&lt;/a&gt;. Ruby sam w sobie nie jest zwi&#261;zany z &lt;span class="caps"&gt;HTML&lt;/span&gt; tak jak &lt;span class="caps"&gt;PHP&lt;/span&gt;. Rails do szablon&#243;w u&#380;ywa biblioteki &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/"&gt;&lt;strong&gt;ERb&lt;/strong&gt;&lt;/a&gt; (ang. &amp;#8220;embed Ruby&amp;#8221;,  czyli &amp;#8220;zagnie&#380;d&#380;ony Ruby&amp;#8221;) Sk&#322;adnia jest bardzo podobna do &lt;span class="caps"&gt;PHP&lt;/span&gt;, &lt;a href="http://java.sun.com/products/jsp/"&gt;&lt;span class="caps"&gt;JSP&lt;/span&gt;&lt;/a&gt; czy &lt;span class="caps"&gt;ASP&lt;/span&gt;. Ruby jest tu j&#281;zykiem zagnie&#380;d&#380;onym w &lt;span class="caps"&gt;HTML&lt;/span&gt;.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="string"&gt; x %&amp;gt; jest 
&amp;lt;% if x &amp;gt; y %&amp;gt; 
    wi&#281;ksze 
&amp;lt;% else %&amp;gt;
    mniejsze 
&amp;lt;% end %&amp;gt;
od &amp;lt;%&lt;/span&gt;&lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;y&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="string"&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;h2&gt;Python&lt;/h2&gt;


	&lt;p&gt;Je&#347;li chodzi o Pythona to istnieje &lt;a href="http://wiki.python.org/moin/Templating"&gt;ca&#322;a masa system&#243;w szablonowych&lt;/a&gt;. Ogranicz&#281; si&#281; do paru, tych bardziej interesuj&#261;cych.&lt;/p&gt;


	&lt;h3&gt;Spyce&lt;/h3&gt;


	&lt;p&gt;Szablony &lt;a href="http://spyce.sourceforge.net/"&gt;Spyce&lt;/a&gt; zosta&#322;o stworzone jako pythonowa konkurencja dla &lt;span class="caps"&gt;PHP&lt;/span&gt;. Podobnie potrafi&#261; przeplata&#263; j&#281;zyk (tu: Pythona) z tagami &lt;span class="caps"&gt;HTML&lt;/span&gt;. Najbardziej oczywista przewaga Spyce wynika z faktu u&#380;ywania j&#281;zyka &lt;a href="http://python.org"&gt;Python&lt;/a&gt;, kt&#243;ry jest znacznie lepiej zaprojektowany i posiada du&#380;o wi&#281;cej mo&#380;liwo&#347;ci ni&#380; &lt;span class="caps"&gt;PHP&lt;/span&gt;. Spyce potrafii budowa&#263; w&#322;asne znaczniki (custom tags, podobnie jak to potrafi&#261; javowe &lt;span class="caps"&gt;JSP&lt;/span&gt;) oraz &#322;atwiej w nich zbudowa&#263; komponenty, kod  do wielokrotnego u&#380;ytku.&lt;/p&gt;


	&lt;h3&gt;Myghty&lt;/h3&gt;


	&lt;p&gt;Szablony &lt;a href="http://myghty.org"&gt;Myghty&lt;/a&gt; powsta&#322;y pierwotnie jako pythonowa implementacja systemu komponentowego &lt;a href="http://masonhq.com"&gt;Mason&lt;/a&gt; dla &lt;a href="http://www.perl.org/"&gt;Perla&lt;/a&gt;. Mimo wielu podobie&#324;stw, Myghty s&#261; znacznie pot&#281;&#380;niejsze o Masona, np. intensywnie wykorzystuj&#261; &lt;strong&gt;obiektowo&#347;&#263;&lt;/strong&gt; Pythona (zobacz &lt;a href="http://www.myghty.org/docs/technical.myt#technical_differences"&gt;r&#243;&#380;nice&lt;/a&gt;). Od pocz&#261;tku Myghty powsta&#322;o z my&#347;l&#261; o du&#380;ych obci&#261;&#380;eniach, ci&#281;&#380;kich, profesjonalnych zastosowaniach. Maj&#261; doskona&#322;y w&#322;asny cache, s&#261; bardzo szybkie, odporne na w&#261;tki, &#347;wietnie si&#281; nadaj&#261; do tworzenia komponent&#243;w.&lt;/p&gt;


	&lt;p&gt;Programi&#347;ci Pythona bardzo ceni&#261; sobie filozofi&#281; tego j&#281;zyka (kt&#243;ra podkre&#347;la prostot&#281;, oczywisto&#347;&#263; i elegancj&#281; sk&#322;adni).  Problem w tym, &#380;e Myghty dla pythonowc&#243;w jest zbyt podobne do Perla. S&#261; za ma&#322;o &amp;#8220;pythonic&amp;#8221; &amp;#8211; pythonowe. Dodatkowo, poprzez podkre&#347;lanie swojej komponentowo&#347;ci, Myghty niekt&#243;rym zbyt kojarzy si&#281; z filozofi&#261; komponentow&#261; frameworku &lt;span class="caps"&gt;ASP&lt;/span&gt;.NET (a wzorzec &lt;span class="caps"&gt;MVC&lt;/span&gt; wydaje si&#281; by&#263; bardziej przejrzysty ni&#380; wzorzec sterowanych zdarzeniami komponent&#243;w).  Myghty, jako system komponentowy, mo&#380;e by&#263; u&#380;ywane w stylu &lt;span class="caps"&gt;MVC&lt;/span&gt;, ale nie jest to takie naturalne i oczywiste. (Na szcz&#281;&#347;cie, wszystko zmieni&#322; &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt; kt&#243;ry zapewnia przejrzyst&#261; prac&#281; zgodn&#261; z wzorcem &lt;span class="caps"&gt;MVC&lt;/span&gt; i Myghty s&#261; tam zredukowane tylko do obs&#322;ugi szablon&#243;w szablon&#243;w. Sterowaniem zajmuj&#261; si&#281; kontrolery Pylonsa a nie Myghty).&lt;/p&gt;


	&lt;h3&gt;Cheetah&lt;/h3&gt;


	&lt;p&gt;Szablony &lt;a href="http://cheetahtemplate.org"&gt;Cheetah&lt;/a&gt; posiadaj&#261; jedn&#261; z najbardziej czytelnych i eleganckich sk&#322;adni. Autorzy wzorowali si&#281; troch&#281; na javowych Velocity i Webmacro. Tym, kt&#243;rzy ceni&#261; sobie czysto&#347;&#263; Pythona z prostot&#261; sk&#322;adni szablon&#243;w z pewno&#347;ci&#261; Cheetah mog&#261; przypa&#347;&#263; do gustu. Przez d&#322;u&#380;szy czas by&#322;y moimi ulubionymi szablonami i do te pory lubi&#281; ich klarowno&#347;&#263;. Cheetah posiadaj&#261; eleganck&#261; sk&#322;adni&#281; obiektowego budowania szablon&#243;w potomnych na bazie ju&#380; istniej&#261;cych. Myghty te&#380; to potrafi, ale Cheetah to ma bardzo czytelnie zrobione. Cheetah s&#261; r&#243;wnie&#380; bardzo szybkie.&lt;/p&gt;


	&lt;h3&gt;Mako&lt;/h3&gt;


	&lt;p&gt;&lt;a href="http://makotemplates.org"&gt;Mako&lt;/a&gt; to najm&#322;odsze dziecko stworzone przez programist&#243;w &lt;a href="http://pylonshq.com"&gt;Pylons&#243;w&lt;/a&gt;. Powsta&#322;y na bazie do&#347;wiadcze&#324; i najlepszych cech szablon&#243;w Myghty, Cheetah, Django/Jinja czy Smarty. Najwi&#281;ksz&#261; ich zalet&#261; jest &lt;strong&gt;ogromna szybko&#347;&#263; i pythonowa filozofia pracy&lt;/strong&gt;. Programi&#347;ci Pythona mog&#261; zauwa&#380;y&#263;, &#380;e sk&#322;adnia Mako jest bardzo bliska sposobowi pracy w samym j&#281;zyku Python. Mako posiadaj&#261; wielk&#261; &#322;atwo&#347;&#263; tworzenia komponent&#243;w, ale w spos&#243;b bardzo podobny do tego jak Python wykorzystuje swoje modu&#322;y. Szablony mo&#380;na tak&#380;e rozszerza&#263; na drodze obiektowego dziedziczenia. Dziedziczenie szablon&#243;w mo&#380;e by&#263; okre&#347;lane w spos&#243;b dynamiczny (tego ju&#380; nie potrafi&#261; np. Cheetah). Dowolny fragment szablonu mo&#380;na r&#243;wnie&#380; zamieni&#263; na komponent z w&#322;asnym cache. Mako posiadaj&#261; tak&#380;e sk&#322;adni&#281; modyfikator&#243;w, kt&#243;re spopularyzowane zosta&#322;y przez Smarty. Dzia&#322;aj&#261; one jak uniksowe pipes (${zmienna|filter}.&lt;/p&gt;


	&lt;p&gt;Mako automatycznie kompiluj&#261; sw&#243;j kod do modu&#322;&#243;w Pythona. Mo&#380;na je wi&#281;c debugowa&#263; tak jak zwyk&#322;y kod Pythona (Cheeatah wymaga r&#281;cznej kompilacji). Mo&#380;na je bez problemu u&#380;ywa&#263; jako niezale&#380;n&#261; bibliotek&#281;. Nie s&#261; one zale&#380;ne od jakiegokolwiek frameworku. Mo&#380;na je zintegrowa&#263; z dowolnym frameworkiem u&#380;ywaj&#261;cym standardu&lt;sup&gt;&lt;a href="#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;span class="caps"&gt;WSGI&lt;/span&gt;. U&#380;ytkownicy frameworka &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt; prawie nic nie musz&#261; robi&#263;, bo Mako s&#261; ju&#380; tam przygotowane do pracy.&lt;/p&gt;


	&lt;p&gt;Og&#243;lnie rzecz bior&#261;c, &lt;strong&gt;Mako&lt;/strong&gt; to &amp;#8211; moim zdaniem &amp;#8211; najlepszy aktualnie istniej&#261;cy system szablon&#243;w dla Pythona.&lt;/p&gt;


	&lt;p&gt;Za&#347; co do framework&#243;w&amp;#8230; to coraz bardziej zaczynam nabiera&#263; pewno&#347;ci, &#380;e przysz&#322;o&#347;&#263; nie nale&#380;y ani do Django, ani do Rails&#243;w. Nic nie mo&#380;e r&#243;wna&#263; si&#281; z mo&#380;liwo&#347;ciami czystego, 100%  frameworka &lt;span class="caps"&gt;WSGI&lt;/span&gt;. Takim jest np. &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt;. Ale o tym, i o &amp;#8220;bitwie&amp;#8221; Pylons vs. Django i Rails, napisz&#281; ju&#380; innym razem.&lt;/p&gt;


	&lt;p&gt;Appendix 2007-01-29: Zobacz te&#380; &lt;a href="http://blog.zabiello.com/articles/2007/01/27/haml-nast%C4%99pna-generacja-szablon%C3%B3w"&gt;szablony Haml&lt;/a&gt;
.&lt;/p&gt;


&lt;hr /&gt;

	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; Poprawnie rzecz m&#243;wi&#261;c, powinien napisa&#263; swojego helpera. Je&#347;li wi&#281;c chcemy wy&#347;wietli&#263; w p&#281;tli rekordy z bazy, a widok jest czu&#322;y na zawarto&#347;&#263; tych danych, to powinni&#347;my ca&#322;a list&#281; rekord&#243;w wrzuci&#263; do helplera, przeiterowa&#263; w p&#281;tli, doda&#263; dodatkow&#261; zmienn&#261; i dopiero tak zmodyfikowan&#261; list&#281; przekaza&#263; do szablonu.&lt;/p&gt;


	&lt;p id="fn2"&gt;&lt;sup&gt;2&lt;/sup&gt; Smarty mimo posiadania w&#322;asnej sk&#322;adni pozwala na odpalanie pe&#322;nego j&#281;zyka &lt;span class="caps"&gt;PHP&lt;/span&gt;: {php}print phpinfo();{/php}. Tak praktyka jest jednak odradzana, bo wprowadza jeszcze wi&#281;kszy ba&#322;agan ni&#380; ju&#380; jest w &lt;span class="caps"&gt;PHP&lt;/span&gt;.&lt;/p&gt;


	&lt;p id="fn3"&gt;&lt;sup&gt;3&lt;/sup&gt; Zobacz artyku&#322; &lt;a href="http://www.xml.com/pub/a/2006/09/27/introducing-wsgi-pythons-secret-web-weapon.html"&gt;Introducing &lt;span class="caps"&gt;WSGI&lt;/span&gt;: Python&amp;#8217;s Secret Web Weapon&lt;/a&gt; oraz &lt;a href="http://www.groovie.org/articles/2006/09/18/wsgi-paste-pylons-and-all-that"&gt;prezentacj&#281; koncepcji &lt;span class="caps"&gt;WSGI&lt;/span&gt;&lt;/a&gt; na video.&lt;/p&gt;</description>
      <pubDate>Sun, 14 Jan 2007 04:25:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:85bc8794-3490-4af9-9c34-8cd949244305</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3</link>
      <category>templates</category>
      <category>savant</category>
      <category>spyce</category>
      <category>myghty</category>
      <category>cheetah</category>
      <category>mako</category>
      <category>django</category>
      <category>jinja</category>
      <category>pylons</category>
      <category>rails</category>
      <category>python</category>
      <category>ruby</category>
      <category>php</category>
      <category>mvc</category>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by MySZ</title>
      <description>&lt;p&gt;Wyja&#347;ni&#322;o si&#281; &amp;#8211; by&#322; siaki&#347; bug w mako, w nowej wersji ju&#380; wsio dzia&#322;a jak nale&#380;y.&lt;/p&gt;</description>
      <pubDate>Fri, 02 Feb 2007 11:38:54 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:a5e5142e-6ef8-4bfd-b185-1e4d33f58aff</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-467</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by MySZ</title>
      <description>&lt;p&gt;Nie lubi&#281; IRCa, wys&#322;a&#322;em na list&#281; dyskusyjn&#261; ;)&lt;/p&gt;</description>
      <pubDate>Thu, 25 Jan 2007 18:05:57 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:dbf554bd-cb72-46ef-91d5-a261d76e4b75</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-439</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;Spr&#243;buj poruszy&#263; t&#261; kwesti&#281; na IRC&amp;#8217;u irc.freenode.net #pylons.&lt;/p&gt;</description>
      <pubDate>Thu, 25 Jan 2007 09:24:38 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:647fbfe8-fb06-4293-92d0-a20dd7d275f2</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-434</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by MySZ</title>
      <description>&lt;p&gt;Tak, to by&#322;o pierwsze co sprawdzai&#322;em, zreszt&#261;:&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Oczywi&#347;cie nie ma znaczenia, czy daj&#281; mu tak obiekt unicode, czy zwyk&#322;y tekst&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;:/&lt;/p&gt;</description>
      <pubDate>Thu, 25 Jan 2007 09:14:51 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:e7115d75-592d-45ff-bbb9-c038e46da842</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-432</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;A pr&#243;bowa&#322;e&#347; ${u&amp;#8217;&#261;&#380;&#347;&#378;&#281;&#263;&#324;&#322;&#243;&amp;#8217; | h} ? Mako woli prac&#281; na obiektach unikodowych.&lt;/p&gt;</description>
      <pubDate>Thu, 25 Jan 2007 02:46:34 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:85598513-39c2-4d83-8d08-ceccc176cede</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-430</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by MySZ</title>
      <description>&lt;p&gt;Czy kto&#347; jeszcze ma problemy z pliterkami w Mako/helperach? :/ Dop&#243;ki w szablonie umieszczam zwyk&#322;y tekst, to jest ok. Ale ju&#380;: ${&amp;#8220;&#261;&#380;&#347;&#378;&#281;&#263;&#324;&#322;&#243;&amp;#8221; | h} wywala &amp;#8220;exceptions.UnicodeEncodeError&amp;#8221;. Oczywi&#347;cie nie ma znaczenia, czy daj&#281; mu tak obiekt unicode, czy zwyk&#322;y tekst, mam zadeklarowane w ka&#380;dym szablonie coding: utf-8 etc etc, a on si&#281; i tak przy ka&#380;dym helperze pluje. Macie mo&#380;e jakies pomys&#322;y?&lt;/p&gt;</description>
      <pubDate>Thu, 25 Jan 2007 02:44:50 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:190a2bbc-30fa-4cef-99dd-999885495237</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-429</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;Tu jest troch&#281; &lt;a href="http://forum.rubyonrails.pl/viewtopic.php?pid=1877#p1877" rel="nofollow"&gt;por&#243;wnania Pythona z Ruby&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Wed, 17 Jan 2007 00:51:23 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:1fe72ff8-b2a5-4fac-9848-38d5ecbadbd3</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-407</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by riklaunim</title>
      <description>&lt;p&gt;Pylons wymy&#347;la fajne rzeczy i nie zmienia API co wydanie&amp;#8230; Django lubi odkrywa&#263; ko&#322;o na nowo. Ciekawe czy po django 1.0 ludzie przestan&#261; masowo u&#380;ywa&#263; wersji SVN. Pewnie po miesi&#261;cu czy dw&#243;ch wersja SVN stanie si&#281; &amp;#8220;zalecana&amp;#8221; ;)&lt;/p&gt;</description>
      <pubDate>Tue, 16 Jan 2007 20:00:48 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:ffb0e55f-3ec6-4ff7-b39d-684e1d69b0ef</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-405</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by yezooz</title>
      <description>&lt;p&gt;ja tez czekam na jakies podsumowanie tej rocznej przygody. z pewnoscia moze to byc dla wielu bardzo pomocne&lt;/p&gt;


	&lt;p&gt;pozdrawiam&lt;/p&gt;</description>
      <pubDate>Tue, 16 Jan 2007 15:43:01 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:0ad09ed8-f801-4834-9821-c3aafc8d5781</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-402</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;Ju&#380; to przerabia&#322;em. Okres ekscytowania si&#281; XSLT mam za sob&#261;. Tobie te&#380; przejdzie.&lt;/p&gt;</description>
      <pubDate>Tue, 16 Jan 2007 09:55:10 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:4e7d1cd9-f237-4eb7-894a-75b29f9d7cc5</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-397</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by rsz</title>
      <description>&lt;p&gt;Spoko spoko, za rok mo&#380;e si&#281; przekonasz do XSLT ;)&lt;/p&gt;</description>
      <pubDate>Tue, 16 Jan 2007 09:17:08 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:842b2897-ab78-48f9-a9f5-3e9c94750c1d</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-396</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;Chodzi g&#322;&#243;wnie o wady. Troch&#281; o tym m&#243;wi&#322;em na &lt;a href="http://www.skype.com/go/joinpublicchat?chat&amp;#38;skypename=hipertracker&amp;#38;topic=Rails%2C+Django%2C+Pylons+%28Polish%29&amp;#38;blob=qL-BIeEXX7A-qDj26JrmQcoze6L4kn_YE4016SUPrFY2DUmNoHxxVoeROiE4d1UZFQ4UJUo8-KPFDhFLqFhSVeo" rel="nofollow"&gt;czacie Skype3&lt;/a&gt; (powinna by&#263; dost&#281;pna historia rozm&#243;w). Napisz&#281; wi&#281;cej p&#243;&#378;niej.&lt;/p&gt;</description>
      <pubDate>Mon, 15 Jan 2007 10:23:07 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:382a4f66-4746-4ec1-9157-a392e4f6ea2e</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-395</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by eXt</title>
      <description>&lt;p&gt;&amp;gt; To co si&#281; zmieni&#322;o, to ponad rok do&#347;wiadcze&#324; z RoR, ostatnio wydane Mako oraz to, &#380;e doceni&#322;em potencja&#322; drzemi&#261;cy w WSGI.&lt;/p&gt;


	&lt;p&gt;Rok do&#347;wiadcze&#324; z RoR i sk&#322;aniasz si&#281; w stron&#281; Pylons&#243;w. Czy&#380;by znudzenie RoR-em, zm&#281;czenie jego wadami, czy po prostu nowatorsko&#347;&#263;/genialno&#347;&#263; Pylonsa?. Mo&#380;e pokusisz si&#281; o napisanie jakiego&#347; podsumowania tego roku z RoRem?&lt;/p&gt;</description>
      <pubDate>Mon, 15 Jan 2007 10:10:18 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:1f3a7c7e-533b-4584-8d7d-4eb16404a697</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-394</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;Ale&#380; ja zawsze docenia&#322;em Pylonsa. Kto Ci&#281; swego czasu na niego namawia&#322;, h&#281;? ;) To co si&#281; zmieni&#322;o, to ponad rok do&#347;wiadcze&#324; z RoR, ostatnio wydane &lt;a href="http://makotemplates.org" rel="nofollow"&gt;Mako&lt;/a&gt; oraz to, &#380;e doceni&#322;em potencja&#322; drzemi&#261;cy w WSGI.&lt;/p&gt;</description>
      <pubDate>Sun, 14 Jan 2007 18:35:19 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:2101f1f3-e41a-4281-84d2-fa3fce037825</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-393</link>
    </item>
    <item>
      <title>"Szablony i wzorzec MVC - cz. III" by climbus</title>
      <description>&lt;p&gt;Jeszcze troch&#281; a ca&#322;kiem ci&#281; przekonam do Pylonsa. Zapraszam do przeczytania mojego nowego wpisu na blogu: &lt;a href="http://blog.netstation.pl/" rel="nofollow"&gt;http://blog.netstation.pl/&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 14 Jan 2007 17:58:46 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:00161b45-ea9b-4bc2-973f-576106357d53</guid>
      <link>http://blog.zabiello.com/articles/2007/01/14/templates-and-mvc-3#comment-392</link>
    </item>
  </channel>
</rss>
