2010-10-07 86 views
1

这是一个最佳实践问题,考虑到我很累,它可能没有多大意义。django:通用视图+自定义模板标签或自定义视图+通用/正常模板标签

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

我设计它最喜欢的应用程序,让您可以通过多种标准列出的博客文章,即

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

在每一页上面我也想列出多少项目是该标准的一部分

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

Django似乎给你很多方法来做到这一点,但没有太多迹象表明什么是最好的灵活性,可重用性和安全性。

我注意到,您可以

答:使用通用/很轻的观点,通过一个查询集的模板,使用自定义的模板标签收集任何剩余的必要信息。

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

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

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

我看到的方式是,在HTTP请求中需要查看视图,收集所需的所需的信息(特定于所请求的内容)并传递HTTP请求和上下文以进行呈现。模板标签应该用于获取与当前模板无关的信息(即获取博客中最新的条目或最受欢迎的条目,但他们可以真正做你喜欢的任何事情)。

这种缺乏定义(或者我的无知)已经开始接触到我,我希望在设计和实现方面保持一致,因此欢迎任何输入!

回答

1

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

你不应该担心你的观点是通用的。毕竟,这就是内置的通用视图。一旦你需要开始跨越他们提供的内容,那么你一定要让它们专用于你的用例。您当然可以找到在多个视图中使用的一些常见功能,在这种情况下,您可以将其分解为单独的功能或甚至上下文处理器,但总体而言,视图是用于特定特定用途的独立位代码。