标题:webpy: 在模板中包含另一个模板 出处:Felix021 时间:Thu, 11 Jul 2013 12:39:42 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?2121 内容: 在模板里引入其他模板应该是很常见的一种需求,但是webpy默认的template居然没有提供这种机制,挺神奇的。 官方的解决办法是把某个模板的输出给另一个模板,看起来和用起来都超级不爽;知乎网友给出的解决方案也很不爽:用render初始化时指定的layout,但是这个跟include差很多,不灵活。 实际上,由于render渲染模板后的输出本身是一个字符串,所以如果能在模板里头直接调用render渲染其他模板就最好了:而且这是可以实现的,只是略带tricky。 由于webpy给render的默认globals是空的,所以模板里只能用基本的python语法,默认连builtin的东西都用不了(比如zip、str),但是可以通过初始化render时指定globals的方式来引入: render = web.template.render('view/', cache=False, globals = __builtins__.__dict__) 所以我们只需要把render自己也加到这个globals里头去,就可以在模板里引用它了: render_globals = {} render = web.template.render('view/', cache=False, globals = render_globals) render_globals['render'] = render 第三句看起来虽然tricky,但是由于python的对象传的是引用,所以可以达到预期的效果。 这样只要在模板里这样写就行了: $:render.header('首页') #那个冒号别漏掉:) Generated by Bo-blog 2.1.0