我需要修饰默认的tornado.locale.Locale.translate
以添加一些额外的逻辑。
在模板中,translate方法是一个下划线(如gettext约定所规定的那样),但我找不到定义或传递的位置(我希望它被指定为模板环境变量别名前面提到的translate方法)
我的另一个选择是用我自己的方法替换所有出现的'_'方法,但我更喜欢坚持标准符号,所以我不必在之后调整字符串提取。
答案 0 :(得分:2)
没关系,我刚刚发现它:
在龙卷风的web.py中:
def render_string(self, template_name, **kwargs):
"""Generate the given template with the given arguments.
We return the generated string. To generate and write a template
as a response, use render() above.
"""
# If no template_path is specified, use the path of the calling file
template_path = self.get_template_path()
if not template_path:
frame = sys._getframe(0)
web_file = frame.f_code.co_filename
while frame.f_code.co_filename == web_file:
frame = frame.f_back
template_path = os.path.dirname(frame.f_code.co_filename)
with RequestHandler._template_loader_lock:
if template_path not in RequestHandler._template_loaders:
loader = self.create_template_loader(template_path)
RequestHandler._template_loaders[template_path] = loader
else:
loader = RequestHandler._template_loaders[template_path]
t = loader.load(template_name)
args = dict(
handler=self,
request=self.request,
current_user=self.current_user,
locale=self.locale,
_=self.locale.translate,
static_url=self.static_url,
xsrf_form_html=self.xsrf_form_html,
reverse_url=self.application.reverse_url
)
args.update(self.ui)
args.update(kwargs)
return t.generate(**args)
args字典有_=self.locale.translate
;所以我可以在我的处理程序中装饰该对象。