【问题标题】:django: generic views + custom template tags or custom views + generic/normal template tagsdjango:通用视图+自定义模板标签或自定义视图+通用/普通模板标签
【发布时间】:2011-04-22 12:36:36
【问题描述】:

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

我一直在将博客应用程序放在一起,作为一种学习体验,并作为我正在开发的网站的实际组成部分。

我将它设计为与大多数应用程序一样,以便您可以按多个标准列出博客文章,即

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

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

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

Django 似乎为您提供了很多方法来做到这一点,但没有太多说明在灵活性、可重用性和安全性方面什么是最好的。

我注意到你也可以

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

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

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

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

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

这种缺乏定义(或我的无知)开始影响到我,我希望在我的设计和实现中保持一致,因此欢迎任何意见!

【问题讨论】:

    标签: django views django-templates


    【解决方案1】:

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

    您不必担心使您的视图具有通用性。毕竟,这就是内置通用视图的用途。一旦您需要开始超越它们提供的内容,那么您绝对应该使它们特定于您的用例。您当然可能会发现一些在多个视图中使用的通用功能,在这种情况下,您可以将其分解为单独的函数甚至上下文处理器,但总的来说,视图是用于特定特定用途的独立代码.

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 2021-07-13
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 2015-12-17
      • 2011-03-31
      • 2011-10-05
      相关资源
      最近更新 更多