Форум сайта python.su
Захотелось написать новый шаблонизатор
Такого нигде не видел - так что это будет по крайней мере уникальный велосипед
Основная киллфича - это множественное наследование
Для ясности картины приведу пару примеров на псевдокоде
layout.html
{% block main %} {% block header %} {% endblock %} {% block content %} {% endblock %} {% block footer %} {% endblock %} {% endblock %}
{% extends "layout.html" %} {% block content %} {% block menu %} {% endblock %} {% for item in object_list if not item.draft %} {% block item %} {{ item }} {% endblock %} {% endfor %} {% endblock %}
{% block menu %} menu ... {% endblock %}
{% block footer %} menu ... {% endblock %}
{% extends "menu.html" "footer.html" "base.html" %} {% block item %} <strong>{{ super() }}</strong> {% endblock %}
Офлайн
а вы точно понимаете разницу между extends и include ?
Офлайн
JOHN_16Есть повод сомневаться?
а вы точно понимаете разницу между extends и include ?
Офлайн
хм, было бы неплохо если бы вы объяснили ваше понимание того как это будет работать, подробно.
Я 20 раз думал и выдвигаю свой третий вариант видения. Запись
{% extends "menu.html" "footer.html" "base.html" %}
Офлайн
JOHN_16
означает что шаблонизатор должен из списка шаблонов выбрать все кроме последнего, обработать их и передать полученные наборы блоков в последний шаблон? (ибо в первые два содержат только блоки,а не инструкции куда их отправлять)
Офлайн
хм.. гляньте на Mako шаблонизатор, там, возможно, есть такое, но в несколько другом виде.
Ну а вообще идея имеет право на жизнь, на счет “киллфичи” не уверен.
Попробуйте высказать это разработчикам Джанги, может им это идея понравится и они реализуют это. Потому как пока что это запись эквивалентна не слишком длинному варианту:
{% extends "base.html" %} {% include "menu.html" %} {% include "footer.html" %} {% block item %} <strong>{{ super() }}</strong> {% endblock %}
Офлайн
<strong>{{ super() }}</strong>
Офлайн
FishHook
Это противоречит философии MVC, в частности “отделение представлений от базовой логики” …как бы так наверное
Офлайн
JOHN_16Как бы хороша не была философия MVC, она так и остается философией. Стопроцентной реализации ее я лично не встречал.
FishHookЭто противоречит философии MVC, в частности “отделение представлений от базовой логики” …как бы так наверное
{{ "point"|str_add:forloop.counter|str_add:'_9'|get_field:form }}
{{ form["point"+forloop.counter+'_9'] }}
Отредактировано FishHook (Янв. 18, 2013 10:10:43)
Офлайн
Обе контсрукции одинаково содержат код, если уж мы говорим о философии джанги, то в данном случае надо сделать custom template tag.
Офлайн