Класс BaseTemplate
Класс BaseTemplate представляет собой абстрактный
базовый класс для всех шаблонизаторов в Bottle. Он
определяет общий интерфейс, которому должны следовать
конкретные реализации шаблонизаторов, такие как
SimpleTemplate, MakoTemplate, Jinja2Template и другие.
Класс предоставляет методы для подготовки шаблона,
поиска и загрузки исходного кода шаблона, а также
для его отрисовки с переданными данными. Кроме того,
класс содержит атрибут global_config, который
хранит глобальные настройки, общие для всех экземпляров
шаблонов. Наследники переопределяют методы
prepare, search и render,
реализуя логику конкретного шаблонизатора.
Синтаксис
class BaseTemplate:
global_config = {}
def prepare(self, **options):
...
def search(self, name, lookup, *args, **kwargs):
...
def render(self, *args, **kwargs):
...
Атрибуты
Класс BaseTemplate содержит атрибут
global_config. Это словарь, в котором хранятся
глобальные настройки, применяемые ко всем экземплярам
шаблонов. Значения из этого словаря автоматически
передаются в методы prepare при инициализации
шаблона.
Методы
Класс определяет три ключевых метода, которые должны
быть переопределены в наследниках. Метод
prepare вызывается при создании экземпляра
шаблона и подготавливает его к работе. Метод
search выполняет поиск исходного кода шаблона
по заданному имени и списку путей поиска. Метод
render выполняет непосредственную отрисовку
шаблона с переданными переменными.
Пример
Давайте создадим собственный шаблонизатор на основе
класса BaseTemplate. Для этого определим
наследника и переопределим все три метода:
from bottle import BaseTemplate, template
class MyTemplate(BaseTemplate):
global_config = {'ext': '.tpl'}
def prepare(self, **options):
self.ext = options.get('ext', '.tpl')
def search(self, name, lookup, *args, **kwargs):
return 'Hello {{ name }}!'
def render(self, *args, **kwargs):
return self.source.replace('{{ name }}', kwargs.get('name', ''))
tpl = MyTemplate()
res = tpl.render(name='abcde')
print(res)
Результат выполнения кода:
"Hello abcde!"
Пример
Давайте рассмотрим, как класс BaseTemplate
взаимодействует с функцией template при
использовании пользовательского шаблонизатора:
from bottle import BaseTemplate, template
class SimpleRenderer(BaseTemplate):
def prepare(self, **options):
self.options = options
def search(self, name, lookup, *args, **kwargs):
return name
def render(self, *args, **kwargs):
return self.source.format(**kwargs)
engine = SimpleRenderer()
res = engine.render(name='user')
print(res)
Результат выполнения кода:
"user"
Смотрите также
-
класс
BaseTemplate,
который является базовым классом для шаблонизаторов -
метод
render,
который выполняет отрисовку шаблона -
метод
prepare,
который подготавливает шаблон к работе -
метод
search,
который выполняет поиск исходного кода шаблона