Согласно документам mako о фильтрации , вы можете установить фильтры по умолчанию, которые применяются внутри шаблонов при создании нового Template
, а также TemplateLookup
(в этом случае это будет применяться по умолчанию для всех шаблонов, которые он ищет), с аргументом default_filters
.
Pylons использует этот аргумент вместе с TemplateLookup
, чтобы установить значения по умолчанию для вашего проекта в файле config/environment.py
:
# Create the Mako TemplateLookup, with the default auto-escaping
config['pylons.app_globals'].mako_lookup = TemplateLookup(
directories=paths['templates'],
error_handler=handle_mako_error,
module_directory=os.path.join(app_conf['cache_dir'], 'templates'),
input_encoding='utf-8', default_filters=['escape'],
imports=['from webhelpers.html import escape'])
Вот почему вы получаете экранирование по умолчанию (а это не тот случай, когда вы используете Мако самостоятельно). Таким образом, вы можете либо изменить его глобально в файле конфигурации, либо не полагаться на стандартный поиск. Имейте в виду, что вы, конечно, должны затем явно использовать фильтр, чтобы избежать тех вещей, которые действительно нужно экранировать.
Вы также можете передать строку, помеченную как безопасную, с помощью помощника Pylons h.literal
, например, если вы передадите h.literal('This will <b>not</b> be escaped')
в шаблон, скажем, в качестве переменной с именем spam
, вы можете просто использовать ${spam}
без побега.
Если вы хотите получить тот же эффект при вызове определенной функции из шаблона, эта функция должна будет возвращать такой литерал или предоставлять помощник для той функции, которая вызывает h.literal
для результата, если вы хотите оставить одна оригинальная функция. (или я думаю, вы также можете вызвать его через «Фильтрующее определение» (см. тот же документ Мако, что и выше), пока не экспериментировали с этим)