Tornado 中的自定义模板管道函数

Custom template pipe fuctions in Tornado

如何定义在 Tornado 中的所有模板上都可用的自定义模板管道函数。

正在努力实现这样的目标:

{{ name | transform_me }}

您可以让您的 控制器 共享一个 Base RequestHandler,其 get_template_namespace 方法被覆盖。

您可能想要一个过滤器模块。

filters.py

def transform_me(value):
    # transform value
    return transformed_value


filters = {
   'transform_me': transform_me
}

共享基础class

您可以将过滤器添加到模板命名空间。当从 BaseRequestHandler 继承的处理程序调用 render 时,您的过滤器将可用。

from filters import filters

class BaseRequestHandler(RequestHandler):
   def get_template_namespace(self):
       namespace = super(BaseRequestHandler, self).get_template_namespace()
       namespace.update(filters)
       return namespace

参考:

您可以通过应用程序传递自定义 ui_methods,这将在所有模板中可用:

import tornado.ioloop
import tornado.web


class MyHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("mytemplate.html")


def my_custom_function(handler, *args):
    # handler is the RequestHandler of current handled request  
    # args are the agrs passed through template
    return 'my_custom {}'.format(str(args)) 

if __name__ == "__main__":
    application = tornado.web.Application(
        [(r"/", MyHandler),],
        # expose function to the templates
        ui_methods={'my_custom_function': my_custom_function}
    )
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

和模板文件

{{ my_custom_function('adsadasda', 'qweqweq') }}