根据对象类,使用不同模板的方法是什么?除了buncha if语句
答案 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
! - ),但是我理解将视图与模型分开。