Как изменить движок шаблонов в Pyramid?
В частности, я хочу использовать pystache, но любое руководство для другого движка шаблонов должно быть достаточно хорошим, чтобы настроить его.
Если я правильно понял, я должен зарегистрировать фабрику визуализации в __init__.py
моего приложения пирамиды.
config = Configurator(settings=settings)
config.add_renderer(None, 'pystache_renderer_factory')
Теперь мне нужно создать фабрику визуализации, и я не знаю, как это сделать.
Хотя я нашел документацию о том, как добавить механизм шаблонов, мне не удалось его настроить.
3 ответа:
Наконец, я смог добавить движок шаблонов pystache, следуя этому руководству:
Что я сделал:
Создал файл mustacherenderer.py:
from pyramid.asset import abspath_from_asset_spec import pystache import os def pystache_renderer_factory(info): template = os.path.join(abspath_from_asset_spec('myproj:templates', False), info.name) f = open(template) s = f.read() f.close() def _render(value, system): return pystache.render(s, value) return _render
Добавил это к
__init__.py
:config.add_renderer('.pmt', 'myproj.mustacherenderer.pystache_renderer_factory')
Работа :)
Лучший способ научиться писать визуализатор-это, вероятно, посмотреть на некоторые из них, которые уже были написаны. А именно: Пакет
add_renderer
'второй аргумент s должен быть классом, реализующим интерфейс, показанный в разделе "добавление нового средства визуализации". Pyramid возьметpystache_renderer_factory
и попытается импортировать его, поэтому в вашем коде строкаimport pystache_renderer_factory
должна будет работать. Этот пример никогда не будет разрешен в класс, только модуль или пакет, поэтому вам придется сначала исправить это. Это должно быть что-то вродеmypackage.pystache_renderer_factory
.pyramid_jinja2
, или в исходном коде пирамиды есть очень простые реализацииjson
иjsonp
рендеров. Обратите внимание, что все они предоставляют довольно уникальные способы реализации требуемого интерфейса. Каждая фабрика принимает объектinfo
и возвращает вызываемый объект, который принимает объектыvalue
иsystem
объекты.Https://github.com/Pylons/pyramid_jinja2/blob/master/pyramid_jinja2/init.py#L260
Https://github.com/Pylons/pyramid/blob/master/pyramid/renderers.py#L135
Обратите внимание, чтоэтот ответ работает хорошо, пока вы не создадите свой проект пирамиды со скаффолдом. Как только вы это сделаете, этот ответ окажется более полезным при построении вашего Pystache/Mustache_render_factory: Как интегрировать pystache с pyramid?.