Jul 11

webpy: 在模板中包含另一个模板 不指定

felix021 @ 2013-7-11 12:39 [IT » 网络] 评论(0) , 引用(0) , 阅读(13751) | Via 本站原创 | |
在模板里引入其他模板应该是很常见的一种需求,但是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('首页') #那个冒号别漏掉:)


转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: http://www.felix021.com/blog/feed.php
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   *非必须
网址   电邮   [注册]