Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Jinja2 и плагины (требуется совет) [RSS Feed]

#1 Янв. 30, 2011 13:08:37

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

Jinja2 и плагины (требуется совет)

Пишу некую плагинную систему и необходимо, чтобы плагины могли изменять шаблоны (jinja2).
Например добавить кусок текста или заменить его и т.д.

Пока придумал два варианта:

1. Плагин наследует от нужных шаблонов

Соответственно все выглядит как наследование шаблона с переопределением блоков, если они определены и т.д.
Внутри все будет реализовано через TemplateLoader
при регистрации плагина его шаблоны регистрируются и загрузчик вначале ищет шаблон в папке плагина (или плагинов) а затем уже в остальных.
Если произошло наследование шаблона то процесс поиска повторяется за исключением того что из поиска убирается ТЕКУЩИЙ шаблон и ОБРАБОТАННЫЕ шаблоны плагинов, чтобы имена переопределяемых шаблонов совпадали.

пример:

# системный шаблон - template1

text
{% block content %}
bla bla bla
{% endblock %}
continue

-----
# шаблон плагина - template1 (с таким же именем)
{% extends "template1" %} {# будет найден системный шаблон или шаблон другого плагина с таким же именем #}

{% block content %}
привет из плагина
{{ super () }}
тра та та
{% endblock %}
2. Явно указать места куда можно вставить данные

минус - не понятно как менять уже существующий шаблон

выглядит примерно так
....
{# регистрируем места вставок в шаблоне #}
{{ reg_ins_point('point_name_1') }}
....
{{ reg_ins_point('point_name_2') }}
в плагине будет что-то типа

@ins_point('point_name') # указываем что хотим вставить содержимое в точку point_name_1
def point_content():
return 'template', {} # возвращаем шаблон и параметры для рендеринга
Хочу услышать совет какой вариант лучше, и может кто-нибудь уже делал нечто подобное и как, а может кто порекомендует какое-нибудь “библиотечное” решение для этого

Заранее спасибо



Офлайн

#2 Фев. 17, 2011 10:16:01

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Jinja2 и плагины (требуется совет)

По какому пути пошел? Тоже интересует эта тема.

У меня сейчас финальная страничка строится из десятка разных шаблонов, за каждый кусок отвечает отдельный класс/метод, некоторые куски приезжают к клиенту через аджакс, и при плагинной подмене я заменяю целиком шаблон(1 кусок).
Сейчас есть идея хранить эти куски у клиента и использовать по надобности, вот и думаю что оптимальней было-б эти куски хранить в 1 файле (шаблоне), но как лучше сделать плагинную подмену…

Офлайн

#3 Фев. 17, 2011 13:55:58

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

Jinja2 и плагины (требуется совет)

По первому, на мой взгляд гибче получается, так как во втором случае мы можем вставить что-то только в точку point_name, а так и до, и после и вместо. Также если блоков - которые нужно изменять несколько - все находится - в одном месте, а не требует нескольких описаний точек вставки. Также уже сразу по структуре шаблонов понятно что и где меняется, не надо смотреть в исходный код.



Офлайн

  • Начало
  • » Web
  • » Jinja2 и плагины (требуется совет)[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version