0

我需要装饰默认值tornado.locale.Locale.translate以添加一些额外的逻辑。

在模板中, translate 方法是一个下划线(正如 gettext 约定所要求的那样),但我找不到定义或传递的位置(我希望它被指定为模板环境变量,别名为上述 translate 方法)。

我的另一个选择是用我自己的方法替换所有出现的“_”方法,但我更愿意坚持使用标准表示法,这样我就不必在之后调整字符串提取。

4

1 回答 1

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;所以我可以在我的处理程序中装饰那个对象。

于 2012-09-24T15:41:34.607 回答