Mako模板取决于对象类?

时间:2010-04-21 22:43:57

标签: python mako

根据对象类,使用不同模板的方法是什么?除了buncha if语句

1 个答案:

答案 0 :(得分:2)

您可以制作dict,将其称为type2templ,将类型(即类别)作为键,将mako.template.Template个实例作为值 - 然后

t = type2templ.get(type(theobj), default_templ)
... t.render() ...

这假设theobj新式类的实例(不是过时的,最好避免的“遗留”类,它们仍然是Python 2中的默认类 - 如果你使用这些,你应该肯定将你的代码升级到新式的类,但使用theobj.__class__是可行的,如果是hackish,替换type(theobj)这里。 default_templ是用于“以上都不是”的默认模板实例(如果您在theobj是不可识别的类型时遇到异常,请使用方括号索引而不是.get致电)。

请注意,这不(直接)“支持继承” - 如果(例如)类foo映射到type2templ到模板bar,那么您创建一个子类{ {1}} baz但未明确记录foo其实例应使用的模板,您将获得type2templ个实例的默认模板。支持继承更复杂 - 除非你只是将mako模板实例作为类属性之一,这当然使得它变得微不足道(如果你命名属性baz只是theobj.thetempl! - ),但是我理解将视图与模型分开。