tornado 默认有一个模板引擎但是功能简单(其实我能用到的都差不多)使用起来颇为麻烦, 而jinja2语法与django模板相似所以决定使用他.
下载jinja2
还是用pip 下载(用的真是爽)
1
|
pip install jinja2
|
这样就可以使用了.
tornado与jinja2 整合
tornado和jinja2整合起来很简单(其实是网上找的比较简单), 不知道从那里找到的反正找到了,不说了直接上代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#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了.