Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 16, 2013 14:17:40

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Идея шаблонизатора

Захотелось написать новый шаблонизатор
Такого нигде не видел - так что это будет по крайней мере уникальный велосипед

Основная киллфича - это множественное наследование

Для ясности картины приведу пару примеров на псевдокоде

layout.html

{% block main %}
    {% block header %}
    {% endblock %}
    {% block content %}
    {% endblock %}
    {% block footer %}
    {% endblock %}
{% endblock %}

base.html
  {% extends "layout.html" %}
  {% block content %}
          {% block menu %}
          {% endblock %}
          {% for item in object_list if not item.draft %}
                  {% block item %}
                       {{ item }}
                  {% endblock %}
          {% endfor %}
  {% endblock %}

menu.html
     {% block menu %}
         menu ...
     {% endblock %}

footer.html
     {% block footer %}
         menu ...
     {% endblock %}

list.html
{% extends "menu.html" "footer.html" "base.html" %}
{% block item %}
     <strong>{{ super() }}</strong>
{% endblock %}



Офлайн

#2 Янв. 17, 2013 02:17:42

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Идея шаблонизатора

а вы точно понимаете разницу между extends и include ?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Янв. 17, 2013 05:20:04

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Идея шаблонизатора

JOHN_16
а вы точно понимаете разницу между extends и include ?
Есть повод сомневаться?



Офлайн

#4 Янв. 18, 2013 01:38:42

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Идея шаблонизатора

хм, было бы неплохо если бы вы объяснили ваше понимание того как это будет работать, подробно.

Я 20 раз думал и выдвигаю свой третий вариант видения. Запись

{% extends "menu.html" "footer.html" "base.html" %}
означает что шаблонизатор должен из списка шаблонов выбрать все кроме последнего, обработать их и передать полученные наборы блоков в последний шаблон? (ибо в первые два содержат только блоки,а не инструкции куда их отправлять)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Янв. 18, 2013 05:35:19

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Идея шаблонизатора

JOHN_16
означает что шаблонизатор должен из списка шаблонов выбрать все кроме последнего, обработать их и передать полученные наборы блоков в последний шаблон? (ибо в первые два содержат только блоки,а не инструкции куда их отправлять)

Совершенно верно
Рендеринг будет осуществляться начиная с блока main
Соответсвенно блоки подставялются аналогично MRO Питона, в супер можно ввести параметр имени блока, также аналогично super Питона.



Офлайн

#6 Янв. 18, 2013 06:37:40

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Идея шаблонизатора

хм.. гляньте на Mako шаблонизатор, там, возможно, есть такое, но в несколько другом виде.

Ну а вообще идея имеет право на жизнь, на счет “киллфичи” не уверен.

Попробуйте высказать это разработчикам Джанги, может им это идея понравится и они реализуют это. Потому как пока что это запись эквивалентна не слишком длинному варианту:

{% extends  "base.html" %}
{% include "menu.html" %}
{% include "footer.html" %}
{% block item %}
     <strong>{{ super() }}</strong>
{% endblock %}



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Янв. 18, 2013 07:09:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Идея шаблонизатора

<strong>{{ super() }}</strong>
Если бы в шаблонах Джанги можно было вызывать функции!



Офлайн

#8 Янв. 18, 2013 09:26:23

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Идея шаблонизатора

FishHook
Это противоречит философии MVC, в частности “отделение представлений от базовой логики” …как бы так наверное



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Янв. 18, 2013 10:10:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Идея шаблонизатора

JOHN_16
FishHookЭто противоречит философии MVC, в частности “отделение представлений от базовой логики” …как бы так наверное
Как бы хороша не была философия MVC, она так и остается философией. Стопроцентной реализации ее я лично не встречал.
И если философия противоречит здравому смыслу, то ну ее нафиг такую философию.
{{ "point"|str_add:forloop.counter|str_add:'_9'|get_field:form }}
Может быть эта конструкция очень фисософна, но я бы предпочел сделать так
{{ form["point"+forloop.counter+'_9'] }}



Отредактировано FishHook (Янв. 18, 2013 10:10:43)

Офлайн

#10 Март 25, 2013 06:46:06

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Идея шаблонизатора

Обе контсрукции одинаково содержат код, если уж мы говорим о философии джанги, то в данном случае надо сделать custom template tag.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version