Latest posts on Pyramid - Базовый шаблон для Chameleon topichttp://python.su/forum/topic/12458/2011-09-05T19:22:34+03:00Веб-технологии :: Pyramid / Pylons / TurboGears :: Pyramid - Базовый шаблон для Chameleon
2011-09-05T19:22:34+03:00Solaris766391. Спасибо большое, это то, чего мне не хватало. Аж обидно, что сам не догадался. )<br/><br/>2. Имелось ввиду, что внутри одного шаблона нельзя указать базовый шаблон. Наверное есть какие-то политические соображения, чтобы шаблонизатор работал с одним файлом и не имел доступа к другим файлам. Но мне вполне достаточно Вашего варианта.<br/><br/>3. Ну насчет выкинуть я наверное погорячился) Пока мне нравится изящность Chameleon, но бывают некоторые казусы. И так как мне опыта не всегда хватает, чтобы принять правильное стратегическое решение, то и возникают подобные провокационные предположения. Т.е. когда не можешь решить задачу каким-либо инструментом, тут два варианта: либо руки не из того места, либо инструмент неподходящий. И тут помогает совет профи: либо “кто ж таким инструментом такие задачи решает”, либо “кто ж таким инструментом так бездарно работает” )<br/><br/>Еще раз спасибо!
Веб-технологии :: Pyramid / Pylons / TurboGears :: Pyramid - Базовый шаблон для Chameleon
2011-09-05T13:19:35+03:00ziro76620Ту надо немного разобраться со структурой пирамиды.<br/><br/>1. в pyramid.events.BeforeRender стоит пихать только те вещи, которые реально используются на практически всех страницах. Более того, на самом деле они тупо добавляются к контексту при разборе шаблона и тот же самый эффект Вы можете достичь передавая данные непосредственно из view, типа такого:<br/><br/><div class="code"><pre>@view_config(...)<br/>def index(request):<br/> base = get_renderer('templates/base.pt').implementation()<br/> return {'base': base}</pre></div>так что, если у Вас используются несколько базовых шаблонов, то возможно наиболее правильно их передавать именно из view.<br/><br/>2. По поводу наследования немного не понял - вы же сами привели код с явным наследованием шаблона.<br/><br/>3. По поводу “выкинуть Chameleon” - выкидывайте, если он Вас не устраивает - есть и другие варианты. Тут в общем то на вкус и цвет. Например, если Вам по душе подход джанги - используйте <a href="https://pylonsproject.org/projects/pyramid_jinja2/dev/">https://pylonsproject.org/projects/pyramid_jinja2/dev/</a>
Веб-технологии :: Pyramid / Pylons / TurboGears :: Pyramid - Базовый шаблон для Chameleon
2011-09-01T12:45:20+03:00Solaris76486Задача сделать базовый шаблон с пустыми слотами на основе которого формируются остальные страницы сайта. Рабочий пример того, как это можно сделать, есть в Shootout (<a href="https://github.com/Pylons/shootout%29">https://github.com/Pylons/shootout)</a><br/><br/>Вкратце это делается так:<br/><div class="code"><pre>#Создается функция-подписчик в модуле subscribers.py<br/>from pyramid.renderers import get_renderer<br/><br/>def add_base_template(event):<br/> base = get_renderer('templates/base.pt').implementation()<br/> event.update({'base': base})<br/><br/>#Регистрируем подписчик в функции main модуля __init__.py<br/> config.add_subscriber('shootout.subscribers.add_base_template',<br/> 'pyramid.events.BeforeRender')</pre></div>Шаблоны:<br/><div class="code"><pre>#Сам базовый шаблон base.pt должен иметь слоты определенные с помощью следующей конструкции<br/><tal:block metal:define-slot="content"></tal:block><br/><br/>#Дочерний шаблон определяется так<br/><html xmlns="http://www.w3.org/1999/xhtml"<br/> xmlns:tal="http://xml.zope.org/namespaces/tal"<br/> xmlns:metal="http://xml.zope.org/namespaces/metal"<br/> metal:use-macro="base"><br/><br/><tal:block metal:fill-slot="content"><br/> Содержимое дочерней страницы<br/></tal:block></html></pre></div>В данном варианте базовый шаблон рендерится вне зависимости от того, будет он использоваться или нет. И если на сайте используется с десяток базовых шаблонов, всех их придется рендерить. Для меня это не критично, но все же возникают вопросы. Может я что-то недопонял, но почему такая распространенная задача, как наследование шаблона, не реализована авторами шаблонного движка? Может есть какие-то другие варианты для решения данной задачи?<br/><br/>P.S. Если кто посоветует выкинуть Chameleon и взять другой шаблонизатор, буду рад вас услышать.