Я могу сказать вам, почему это не работает, но у меня нет чистого решения на данный момент.Ваш шаблон как дано компилируется в этот код Python:
# -*- encoding:utf-8 -*-
from mako import runtime, filters, cache
UNDEFINED = runtime.UNDEFINED
__M_dict_builtin = dict
__M_locals_builtin = locals
_magic_number = 5
_modified_time = 1285968547.0498569
_template_filename='<snip>'
_template_uri='<snip>'
_template_cache=cache.Cache(__name__, _modified_time)
_source_encoding='utf-8'
_exports = ['function']
# SOURCE LINE 1
lookup = { 'key': function }
def render_body(context,**pageargs):
context.caller_stack._push_frame()
try:
__M_locals = __M_dict_builtin(pageargs=pageargs)
__M_writer = context.writer()
# SOURCE LINE 3
__M_writer(u'\n\n')
# SOURCE LINE 7
__M_writer(u'\n')
return ''
finally:
context.caller_stack._pop_frame()
def render_function(context):
context.caller_stack._push_frame()
try:
__M_writer = context.writer()
# SOURCE LINE 5
__M_writer(u'\n Output\n')
return ''
finally:
context.caller_stack._pop_frame()
Как вы можете видеть, ваш function
фактически был определен как render_function
. В документации Mako указано, как вызывать def из-за пределов шаблона , но они не указывают, как это сделать правильно во время выполнения.Код, который я тоже связал, просто выполняет поиск "render_%s" % name
(см. Mako.template, строка 217), так что вы могли бы подумать над тем, чтобы сделать это.