python web.py研究2

web.py没有自己的模板引擎,需要引入别人的,他有一个类 web.contrib.template  里面做了些对接第三方模板的支持

比如要使用jinja模板

templates_path=os.path.join(app_root,'templates').replace("\\","/")

#配置模板引擎
render = render_jinja(
        templates_path,   # 设置模板路径.
        encoding = 'utf-8', # 编码.
    )

class home:        
    def GET(self):
        return render.home({})



源代码:
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


先初始化jinja,然后在 render.home的时候调用 __getattr__(self, name) 方法,在里面根据home名字去查找名字为home的模板文件,最后返回渲染



猜你喜欢

转载自duantonghai.iteye.com/blog/2203217