给bottle的jinja2插件自定义filter

书接上文说一下bottle如何自定义jinja2模板引擎的filters。

前边咱们说到

bottle中使用jinja2_template即等同于template(你传入参数, template_adapter=Jinja2Template)
,引用一个bottle中template()的关键部分
def template(*args, **kwargs):
...
...
settings = kwargs.pop('template_settings', {})
...
...
TEMPLATES[tpl] = template_adapter(name=tpl, lookup=lookup, **settings)
类似这几句代码,代码大概含义就是从template_settings获取内容然后传递给template_adapter对应对象(即咱们使用的Jinja2Template)

继续跟进Jinja2Template,Jinja2Template接收到settings后会怎么处理呢?俺随后找到了下边这段代码

class Jinja2Template(BaseTemplate):
def prepare(self, filters=None, tests=None, **kwargs):
...
self.env = Environment(loader=FunctionLoader(self.loader), **kwargs)

这样只要想办法给Environment传入一个dict包含filter的参数即可。俺定义了这样一个filter

def datetimeFormat(value, format='%Y-%m-%d %H:%M:%S'):
    '''时间转换'''
    return time.strftime(format, time.localtime(value))
 
template_settings=dict(filters = {"datetimeformat": datetimeFormat})

使用方法如下:
from bottle import jinja2_template as template
def func():
    return template("Templates/showurls.html", 传入模板的数据, template_settings = template_settings)

Via:Chairo@2011年11月19日-EOF-

添加新评论 »

captcha 请输入验证码