问题
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