django:通用视图+自定义模板标签或自定义视图+通用/普通模板标签

时间:2010-10-07 18:16:23

标签: django views django-templates

这更像是一个最佳实践问题,而且考虑到我很累,它可能没有多大意义。

我一直在组建一个博客应用程序作为学习经验,并作为我正在开发的网站的实际部分。

我像大多数应用程序一样设计它,以便您可以按多个标准列出博客帖子,例如。

/blog/categories/
/blog/authors/
/blog/tags/
/blog/popular/
etc.

在上面的每一页上,我还想列出该条件中有多少条目

即。对于“类别”,我希望/ blog / categories /列出所有不同的类别,但也要提到该类别中有多少博客帖子,并可能列出这些条目。

Django似乎为您提供了很多方法,但在灵活性,可重用性和安全性方面没有太多指示。

我注意到你可以

答:使用通用/非常轻的视图,将查询集传递给模板,并使用自定义模板标记收集任何剩余的必要信息。

即。传递包含类别的查询集,并为每个类别使用模板标记来获取该类别的条目

或B:使用自定义/重视图,通过视图传递一个或多个查询集+额外必要信息,并使用较少的模板标记来获取信息。

即。传递包含类别+其条目的词典列表。

我看到的方式是视图在那里接收HTTP请求,收集必需的信息(特定于所请求的内容)并传递HTTP请求和要呈现的Context。模板标签应该用于获取与当前模板无关的 superflous 信息(即获取博客中的最​​新条目或最受欢迎的条目,但它们可以真正做到等。)

这种缺乏定义(或者我的无知)开始向我提出,我希望在我的设计和实施方面保持一致,所以欢迎任何输入!

1 个答案:

答案 0 :(得分:1)

我会说你的理解是对的。收集信息并通过模板呈现信息的主要方法始终是视图。模板标签可用于您可能需要执行的任何额外信息和处理,可能跨多个视图,这与您正在呈现的视图没有直接关系。

您不应该担心视图是通用的。毕竟,这就是内置通用视图的用途。一旦你需要开始走出他们提供的东西,那么你一定要特定于你的用例。您当然可以找到在多个视图中使用的一些常用功能,在这种情况下,您可以将其分解为单独的函数或甚至是上下文处理器,但总的来说,视图是针对特定特定用途的独立代码。