Как изменить движок шаблонов в Pyramid?


В частности, я хочу использовать pystache, но любое руководство для другого движка шаблонов должно быть достаточно хорошим, чтобы настроить его.

Если я правильно понял, я должен зарегистрировать фабрику визуализации в __init__.py моего приложения пирамиды.

config = Configurator(settings=settings)
config.add_renderer(None, 'pystache_renderer_factory')

Теперь мне нужно создать фабрику визуализации, и я не знаю, как это сделать.

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

3 2

3 ответа:

Наконец, я смог добавить движок шаблонов pystache, следуя этому руководству:

Https://groups.google.com/forum/#!searchin/pylons-discuss/add_renderer/pylons-discuss/Y4MoKwWKiUA/cyqldA-vHjkJ

Что я сделал:

Создал файл 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?.