Passing a custom python function into a tornado template

筅森魡賤 提交于 2020-01-02 08:26:12

问题


I want to write a custom function and pass it unto my tornado template fine.

Like def trimString(data): return data[0:20] then push this into my tornado file. This should allow me trim strings.

Is this possible?

Thanks.


回答1:


It's not especially clear in the documentation, but you can do this easily by defining this function in a module and passing the module to tornado.web.Application as the ui_methods argument.

I. E.:

in ui_methods.py:

def trim_string(data):
    return data[0:20]

in app.py:

import tornado.ioloop
import tornado.web

import ui_methods

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("main.html")


urls = [(r"/", MainHandler)]
application = tornado.web.Application(urls, ui_methods=ui_methods)

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

in main.html:

....
{{ trim_string('a string that is too long............') }}
....

Andy Boot's solution also works, but it's often nice to have functions like this automatically accessible in every template.




回答2:


You can import functions in Tornado. I think this is the cleanest solution. At the top of your template simply do the following:

{% import lib %}

later you can do

{{ trim_string(data)}}



回答3:


You can also pass the function in as a template variable like this:

 template_vars['mesage'] = 'hello'
 template_vars['function'] = my_function # Note: No ()

        self.render('home.html',
            **template_vars
        )

Then in your template you call it like this:

 {{ my_function('some string') }}


来源:https://stackoverflow.com/questions/12993835/passing-a-custom-python-function-into-a-tornado-template

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!