См.также
В пирамиде нет встроенного шаблонизатора. Представления (view callable)
всегда отдают объект response
. Этот объект может формироваться напрямую,
например Response("Hello, world!")
. При помощи встроенных обработчиков
(string, json, jsonp), самописных или сторонних. Или через специальные функции,
например pyramid.renderers.render_to_response()
.
Дополнительные обработчики могут поставляться сторонними модулями:
config.include('pyramid_chameleon') # Chameleon - template engine
config.include('pyramid_jinja2') # Jinja2 -template engine
config.include('pyramid_mako') # Mako -template engine
Обработка напрямую происходит при помощи функции
pyramid.renderers.render_to_response()
.
Примечание
Предварительно нужно добавить расширение, которое знает как обрабатывать шаблоны Chameleon.
config.include('pyramid_chameleon')
from pyramid.renderers import render_to_response
def sample_view(request):
return render_to_response('mypackage:templates/foo.pt',
{'foo':1, 'bar':2},
request=request)
Функция pyramid.renderers.render()
вернет только текст, а не объект response
.
from pyramid.renderers import render
from pyramid.response import Response
def sample_view(request):
result = render('mypackage:templates/foo.pt',
{'foo':1, 'bar':2},
request=request)
response = Response(result)
return response
Такой подход позволяет, например, использовать возможности самого шаблонизатора напрямую.
from mako.template import Template
from pyramid.response import Response
def make_view(request):
template = Template(filename='/templates/template.mak')
result = template.render(name=request.params['name'])
response = Response(result)
return response
Альтернативный способ функции render_to_response()
,
это привязывать к представлению свой обработчик. При этом представление
возвращает только словарь, который в последующем будет обработан этим
рендерером.
from pyramid.view import view_config
@view_config(renderer='mypackage:templates/foo.jinja2')
def my_view(request):
return {'foo':1, 'bar':2}
Этот код идентичен:
from pyramid.renderers import render
from pyramid.response import Response
def sample_view(request):
result = render('mypackage:templates/foo.jinja2',
{'foo':1, 'bar':2},
request=request)
response = Response(result)
return response
См.также
pip install pyramid_jinja2
Добавляется стандартными средствами:
config.Configurator()
config.include('pyramid_jinja2')
или
pyramid.includes=
pyramid_jinja2
@view_config(renderer='mypackage:templates/mytemplate.jinja2')
def my_view(request):
return {'foo': 1, 'bar': 2}
По умолчанию pyramid_jinja2
ищет директорию с шаблонами относительно вашего
проекта, поэтому можно опустить название проекта.
@view_config(renderer='templates/mytemplate.jinja2')
def my_view(request):
return {'foo': 1, 'bar': 2}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Hello World!</title>
</head>
<body>
<h1>{{ foo }}</h1>
<h1>{{ bar }}</h1>
</body>
</html>
Фреймворк Pyramid не ограничивает вас в использовании какого-либо определенного шаблонизатора. Вы можете выбрать любой который вам понравится или пользоваться несколькими, при этом можно написать собственные обработчики запросов, даже не привязанные к движкам шаблонов и даже написать свой собственный шаблонизатор с расширением для пирамиды, как например Tonnikala.