7

我正在浏览 Django 网站上的快速投票教程,最后一个主题是通用视图的介绍。一种无需为每个 URL 模式创建自定义视图的便捷方法。

据我了解,这是主要思想:

1) 请求 -> URL 模式 -> 视图 -> 模板

或者

2) 请求 -> URL 模式(通用视图)[-> 可选模板]

2 似乎需要更少的代码,它只需要两个步骤而不是四个步骤,但不利的一面是,您将更多的东西粘贴到 URL 模式中,有更多的自动化,并且您的视图现在在两个地方定义。

我真的很喜欢拥有 URL 模式的想法 - 模式,而不是添加额外的样板。我也喜欢明确定义所有视图的想法,即使是简单的视图,这样以后我就知道在哪里可以找到它们,而无需来回浏览文件。另外,我们都知道任何自动化都比你从头开始构建的东西更难定制(至少从 Django 从头开始​​)。

我错过了什么吗?我是否犯了一个很大的错误,以后会困扰我,因为我根本不使用通用视图?

4

3 回答 3

10

通用视图的目的是在您在多个视图中重复使用类似代码时减少样板代码。你真的应该为此使用它。基本上,仅仅因为django 允许你通常做的事情你不应该这样做,特别是当你的代码变得不喜欢你的时候。

如果您使用 django-1.3 的基于类的视图,则无需将许多变量传递给 中的函数urls.py,您可以覆盖各自感兴趣的方法,这提供了两全其美的效果。- 更少的代码,更多的控制。

于 2011-06-26T17:11:35.377 回答
3

是否使用通用视图是您的特权。它不会给您带来任何麻烦,尽管您可能会发现自己在编写重复的视图逻辑。您可能会考虑在您的views.py 中使用包装/子类化的通用视图(通常您仍然希望自定义它们),这将使样板文件远离您的urls.py 和所有视图在同一个地方。

于 2011-06-26T16:29:22.533 回答
2

在 django 1.2 中,我使用通用视图,但在“普通”视图中,而不是在 url 中,例如:

#views.py
import generic_views

def my_generic_list(request):
    qs = Something.objects.filter(some arguments)
    return generic.object_list(queryset = qs, ... other stuff, usually extra_context)

这种方式(imo)视图非常简单,但在发生变化时可以成为“真实的”,而 urls.py 保持干净

于 2011-06-26T20:40:23.340 回答