Tornado中的自定义模板管道功能

时间:2017-08-08 08:07:34

标签: python tornado

如何定义Tornado中所有模板上可用的自定义模板管道功能。

尝试实现这样的目标:

{{ name | transform_me }}

2 个答案:

答案 0 :(得分:2)

您可以使用应用程序传递自定义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') }}

答案 1 :(得分:0)

您可以让控制器共享一个Base RequestHandler <{1}}方法被覆盖。

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

<强> filters.py

get_template_namespace

共享基类

您可以将过滤器添加到模板命名空间。从继承自def transform_me(value): # transform value return transformed_value filters = { 'transform_me': transform_me } 的处理程序调用{​​{1}}后,您的过滤器将可用。

render

参考: