web.py中自定义jinja2模块,web.pyjinja2模块,web.py是一个轻量级
web.py中自定义jinja2模块,web.pyjinja2模块,web.py是一个轻量级
web.py是一个轻量级的Python web开发框架,不过自带的模板自己很不习惯,就换成了jinja2。web.py已经封装了jinja2的接口,很简单
from web.contrib.template import render_jinjarender = render_jinja('templates', encoding='utf-8')
之后就和自带模板一样使用了。web.py中使用jinja2的源代码如下
class render_jinja: """Rendering interface to Jinja2 Templates Example: render= render_jinja('templates') render.hello(name='jinja2') """ def __init__(self, *a, **kwargs): extensions = kwargs.pop('extensions', []) globals = kwargs.pop('globals', {}) from jinja2 import Environment,FileSystemLoader self._lookup = Environment(loader=FileSystemLoader(*a, **kwargs), extensions=extensions) self._lookup.globals.update(globals) def __getattr__(self, name): # Assuming all templates end with .html path = name + '.html' t = self._lookup.get_template(path) return t.render
在__getattr__函数中,path = name + '.html'使得只能访问同级目录下的模板。同时,还不方便使用自定义函数。在其基础之上,稍作修改即可,如下
class RenderJinja2: postfix = ('.html', '', 'htm', 'tpl') def __init__(self, *a, **kwargs): extensions = kwargs.pop('extensions', []) globals = kwargs.pop('globals', {}) registers = kwargs.pop('registers', {}) self._lookup = Environment(loader=FileSystemLoader(*a, **kwargs), extensions=extensions) self._lookup.globals.update(globals) self._lookup.globals.update(registers) def render(self, path, **kwargs): for fix in self.postfix: realpath = path + fix try: t = self._lookup.get_template(realpath) return t.render(**kwargs) except: pass raise TemplateNotFound def __getattr__(self, name): path = name + '.html' t = self._lookup.get_template(path) return t.render
现在,自定义的函数、变量可以通过register这个字典传入,渲染时也有两种方式,
通过register传入自定义的函数或者变量,这里为了方便,使用了locals()
render = RenderJinja2('path/to/templats', encoding='utf-8', registers=locals())# 渲染时render.render('path', **kwargs) # 新加的renderrender.post(**kwargs) # 原先的方式,通过 __getattr__
相关内容
- 用Tornado连接新浪微博,Tornado连接新浪,前几天心血来潮
- python金额小写转换代码,python金额小写,[Python]代码de
- Python 获取文件夹的大小,python获取文件夹,[Python]代码
- python四舍五入,,python的内置函数r
- python 使用MySQLdb连接mysql,pythonmysqldb,MySQLdb顾名思义,
- python处理JSON中的浮点数不精确问题,pythonjson浮点数,有
- python 缩略图,给图片加水印,,这里使用了PIL类库。[
- python比较两个文件的差异,python两个差异,下面的pytho
- Python 求解组合问题,python求解组合,[Python]代码de
- Python sqlite模块,pythonsqlite模块,sqlite是非常著名的
评论关闭