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') }}
如何定义在 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') }}