我想听听你对此的看法。Django过滤器的作用。在视图中过滤或预先格式化?
我有一个django应用程序,从模型中获得的数据很粗糙。为了使它们更好,我必须做一些潜在的复杂操作,但不是太多。 举个例子,假设你有一个模型,其中美国国家编码为两个字母代码。在html渲染中,您想要为用户呈现完整的状态名称。我有另一个数据库表中的通信双字母 - >全名。假设我不想执行连接。
我有两个选择
- 有视图代码提取模型中的两个字母的信息,然后执行对第二表的查询,得到的全名,并把它在上下文。模板呈现完整的状态名称。
- 创建一个自定义过滤器,它接受双字母代码,命中数据库并返回全长名称。让视图将双字母信息传递到上下文中,并将模板中的管道放入过滤器中。筛选器将双字母代码呈现为完整字符串。
现在,这些解决方案似乎是等同的,但它们不可能,也从设计角度来看。我对在过滤责任和观点责任之间划清界限表示怀疑。解决方案1正在完成解决方案2中的过滤器任务,它只是集成在视图本身中。当然,如果我必须在同一页面内多次调用过滤器,解决方案1可能会更快(除非过滤器输出已被记忆)。
对于设计,正确的编码和性能,您有什么看法?
虽然我同意这两个解决方案中的第一个是更好的......我仍然认为这个模型就属于这个范畴。该模型不仅仅是数据库的一个接口。它应该被用来收集和处理数据。 该视图用于执行业务逻辑,并将alpha-2国家/地区代码转换为全名很难做到业务逻辑......它是数据操作。 – ashchristopher 2010-01-22 04:52:39
这是一个很好的观点。编辑我的答案。 – 3lectrologos 2010-01-22 06:30:54