Jinja2是人氣Web框架Flask中的內建模板引擎,而且與Django的模板引擎比較類似,這裡我們就來看一下為Python的Tornado框架配置使用Jinja2模板引擎的方法
tornado 默認有一個模板引擎但是功能簡單(其實我能用到的都差不多)使用起來頗為麻煩, 而jinja2語法與django模板相似所以決定使用他.
下載jinja2
還是用pip 下載(用的真爽)
pip install jinja2
這樣就可以使用了.
tornado與jinja2 整合
tornado和jinja2整合起來很簡單(其實是網路上找的比較簡單), 不知道從那裡找到的反正找到了,不說了直接上程式碼
#coding:utf-8 import tornado.web from jinja2 import Environment, FileSystemLoader, TemplateNotFound class TemplateRendring(object): """ A simple class to hold methods for rendering templates. """ def render_template(self, template_name, **kwargs): template_dirs = [] if self.settings.get('template_path', ''): template_dirs.append(self.settings['template_path']) env = Environment(loader=FileSystemLoader(template_dirs)) try: template = env.get_template(template_name) except TemplateNotFound: raise TemplateNotFound(template_name) content = template.render(kwargs) return content # 就是重新写 BaseHandler 由jinja2模板渲染 class BaseHandler(tornado.web.RequestHandler, TemplateRendering): """ Tornado RequestHandler subclass. """ def initialize(self): pass def get_current_user(self): user = self.get_secure_cookie('user') return user if user else None def render_html(self, template_name, **kwargs): kwargs.update({ 'settings': self.settings, 'STATIC_URL': self.settings.get('static_url_prefix', '/static/'), 'request': self.request, 'current_user': self.current_user, 'xsrf_token': self.xsrf_token, 'xsrf_form_html': self.xsrf_form_html, }) content = self.render_template(template_name, **kwargs) self.write(content)
這樣就可以在tornado中替換self.render為self.render_html了.
更多Python的Tornado框架配置使用Jinja2模板引擎相關文章請關注PHP中文網!