Форум сайта python.su
Кто-нибудь что-то использовал по сабжу? Хочется иметь такую штуку, но ничего внятного, к сожалению, пока не нашел. Jinja, что печально, сабж не поддерживает.
Офлайн
Chameleon - http://chameleon.repoze.org/
Офлайн
Хм, макросы - это, имхо, не множественное наследование и, вообще, даже не наследование. Или я чего-то не понимаю?
Офлайн
zheromo, а как вы себе представляете множественное наследование шаблонов? Точнее его цели и хотя бы очерки реализации?
Офлайн
regallПримерно также как наследуются классы. Например:
zheromo, а как вы себе представляете множественное наследование шаблонов? Точнее его цели и хотя бы очерки реализации?
{% block header %} header text {% endblock %}
{% block content %}
{% block title %} title {% endblock %}
content text
{% endblock %}
{% block footer %} footer text {% endblock %}
{%block header %} new header {% endblock %}
{%block title %} new title {% endblock %}
{% extends layout, header_mixin %}
{%block content%}
{{ super }}
my content
{% endblock %}
new header
new title
content text
my content
footer text
Офлайн
В качестве реального примера могу привести такую ситуацию: есть ряд видов контента, которые очень удобно наследуются друг от друга, например добавление каких либо элементов, замена одного на другой и т.д. Контент должен отображаться по разному для различных групп пользователей, анонимусы, авторизированные, владельцы контента, администраторы и т.д. Проявляется это в основном в добавлении элементов редактирования и управления контентом, эти элементы также очнь удобно описываются наследованием, т.е. например администратор имеет те же элементы, что и модератор плюс еще некоторые.
Обнаружилось что все это вместе легко бы соединилось если бы можно было объединить эти две иерархии наследования, т.к. по сути они друг от друга почти не зависят, а их совместное использование при “одиночном” наследовании приводит к куче условий, шаблон получается плохо читаемым, как минимум.
Офлайн
zheromo, это уже явно не проблема шаблона, а проблема проектирования приложения. Шаблон должен получать, в идеале, плоский контекст и вставлять его переменные в положенные места. То, что вы хотите сделать логику представления шаблонами не есть хорошо.
Офлайн
regall
Шаблон должен получать, в идеале, плоский контекст и вставлять его переменные в положенные места.
return template % context
regallА где ее еще делать? Во вьюхе? А именно к этому и стремлюсь, так как сейчас вьюха проверила права доступа, извлекла контент и передала его в шаблон, приходится писать кучу ифов, такого рода - ели пользователь обладает ролью такой-то, то нарисовать кнопочку такую-то, если ролью такой-то то такую и т.д. (Управление контентом происходит с фронтенда а не с админки - это требование).
То, что вы хотите сделать логику представления шаблонами не есть хорошо.
Офлайн
в примере (пост 5) header_mixin должен быть отнаследован от layout, а “Наследующий шаблон” от header_mixin.
а пример с админами:
все что сходится выводим в template_doc, а отличия рассовываем в user и admin
layout -> template_doc -> user
\-------> admin
layout -> template_doc -> user -> admin
Отредактировано (Апрель 19, 2011 21:00:55)
Офлайн
o7412369815963пример я просто привел для демонстрации работы наследования, не больше
в примере (пост 5) header_mixin должен быть отнаследован от layout, а “Наследующий шаблон” от header_mixin.
layout -> content_1 -> content_2 -> content_3
\
-> content_4
manage_layout -> user -> moderator -> administrator
\
-> owner
extends(content_3, moderator)
Отредактировано (Апрель 20, 2011 06:09:32)
Офлайн