我想听听你对此的看法。
我有一个django应用程序,从模型中获取的数据很粗糙。为了使它们更好,我必须做一些可能复杂但不多的操作。 例如,假设您有一个模型,其中美国州被编码为两个字母代码。在html呈现中,您希望向用户显示完整的州名称。我有两个字母的对应关系 - >另一个db表中的全名。我们假设我不想执行连接。
我有两个选择
现在,这些解决方案看似相同,但从设计的角度来看也是如此。我对在过滤器责任和视图责任之间划清界线持怀疑态度。解决方案1正在解决方案2中执行过滤器的任务,它只是集成在视图本身中。当然,如果我必须在同一页面内多次调用过滤器,解决方案1可能更快(除非过滤器输出被记忆)。
您对设计,正确编码和性能有何看法?
答案 0 :(得分:2)
在我看来,你的模型应该有一个方法来进行转换。制作过滤器似乎是额外的工作,我不认为大多数Django开发人员会在过滤器中期望这样的事情。
过滤器意味着更通用 - 格式化和显示数据而不是查找。
答案 1 :(得分:2)
我的观点是,从设计的角度来看,第一个解决方案更清晰。我希望将模板图层视为演示文稿的最后阶段,其中所有信息都以视图传递(最终形式)。
最好在视图中包含所有“计算逻辑”。那个方式:
阅读和理解(尤其是第三方)要容易得多。
我需要更改某些内容,您可以专注于特定的视图方法,并确保您需要更改的所有内容都在那里(无需在视图中来回切换)到模板)。
至于表现,我认为你的观点是正确的。如果你想多次进行相同的查找,第二种解决方案会更糟。
修改强>: 参考ashchristopher的评论,我实际上试图说它肯定不属于模板。从来没有真正清楚什么是业务逻辑,以及“数据提供”和“业务逻辑”之间的界限在哪里。在这种情况下,似乎ashchristopher是正确的。将状态代码转换为完整状态名称可能是与数据库相关的编码问题,而不是业务逻辑代码。