Согласно mako docs about filtering, вы можете установить фильтры по умолчанию, которые применяются внутри шаблонов при создании нового Template
, а также для TemplateLookup
(в этом случае это будет применяться по умолчанию для всех шаблонов, которые он смотрит вверх), с аргументом default_filters
.
Пилоны используют этот аргумент с 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'])
Вот почему вы получите вылетающий по умолчанию (это не тот случай, когда вы используете Мако самостоятельно). Таким образом, вы можете либо изменить его глобально в файле конфигурации, либо не полагаться на стандартный поиск. Помните, что вам следует, конечно, явно использовать фильтр, чтобы избежать тех вещей, которые требуют экранирования.
Вы также можете передать строку «помеченных как безопасные» с помощником Пилоны h.literal
, например, если бы вы передать h.literal('This will <b>not</b> be escaped')
в шаблон, скажем, в качестве переменной с именем spam
, вы могли бы просто использовать ${spam}
без экранирования.
Если вы хотите получить такой же эффект при вызове определенной функции изнутри шаблона, эта функция должна будет вернуть такой литерал или предоставить вспомогательный элемент для этой функции, который вызывает h.literal
на результат, если вы хотите покинуть оригинальная функция в одиночку. (Или я предполагаю, что вы могли бы также назвать это через «Filtering опр» (см Мако же документ, как указано выше), не экспериментировал с этим еще)
Это должно войти в «класс», который возвращается 'h.some_function_that_outputs_html()' Я предполагаю. – Felix