Python Tornado中的自定义模板管道功能
如何定义Tornado中所有模板上可用的自定义模板管道函数 试图实现这样的目标:Python Tornado中的自定义模板管道功能,python,tornado,Python,Tornado,如何定义Tornado中所有模板上可用的自定义模板管道函数 试图实现这样的目标: {{ name | transform_me }} 您可以让控制器共享一个基本RequestHandler,其 get\u template\u命名空间方法被覆盖 您可能需要一个过滤器模块 过滤器.py def transform_me(value): # transform value return transformed_value filters = { 'transform_me
{{ name | transform_me }}
您可以让控制器共享一个基本RequestHandler,其
get\u template\u命名空间
方法被覆盖
您可能需要一个过滤器模块
过滤器.py
def transform_me(value):
# transform value
return transformed_value
filters = {
'transform_me': transform_me
}
共享基类
您可以将筛选器添加到模板命名空间。当从继承自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\u方法,该方法将在所有模板中提供:
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的默认库以这种方式支持过滤器。我的意思是你可以定义你可以应用的函数,但是你的语法是{{transform\u me(name)}}
。您使用的模板库是什么jinja2
?是的,我只是喜欢将函数作为上下文传递给每个模板。我想全局定义它,这样默认情况下它在所有模板上都可用。你知道这是否可以做到吗?