【问题标题】:Mako template depending on object class?Mako 模板取决于对象类?
【发布时间】:2011-02-10 20:07:09
【问题描述】:

根据对象类使用不同模板的简洁方法是什么?除了一堆 if 语句

【问题讨论】:

  • 在 Python 中工作时,根据对象的类型做不同的事情几乎总是一个设计缺陷。也许您应该预处理您的数据,以便模板可以直接访问它?
  • 我会这样做的,我只是意识到我可能做错了什么

标签: python mako


【解决方案1】:

你可以创建一个dict,叫它type2templ,以类型(即类)作为键,mako.template.Template 实例作为值——然后

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

这假设 theobj 是一个 new-style 类的实例(不是过时的、最好避免的“遗留”类,它们在 Python 2 中仍然是默认的——如果你使用那些,你应该绝对将你的代码升级到新风格的类,但是使用theobj.__class__ 是一个可行的,如果hackish,替代type(theobj) 这里)。 default_templ 是用于“以上都不是”的默认模板实例(如果您希望在 theobj 属于无法识别的类型时出现异常,请使用方括号索引而不是 .get 调用)。

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

【讨论】:

    猜你喜欢
    • 2012-07-02
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2018-04-09
    • 1970-01-01
    • 2018-08-03
    相关资源
    最近更新 更多