Django - 是否使用通用视图?

时间:2011-06-26 15:55:49

标签: python django django-generic-views

我正在浏览Django网站上的快速民意调查教程,最后一个主题是通用视图的介绍。一种方便的方法,可以绕过为每个URL模式创建自定义视图的需要。

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

1)请求 - >网址格式 - >查看 - >模板

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

2似乎需要更少的代码,它只有两个步骤,而不是四个,但是在缺点上你会更多的东西进入URL模式,更多的自动化正在进行,你的视图现在定义在两个地方。 / p>

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

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

3 个答案:

答案 0 :(得分:10)

Generic Views的目的是在多个视图中重复使用类似代码时减少样板代码。你应该真正使用它。基本上,只是因为 django允许你通常做的事情你不应该这样做,特别是当你的代码变成而不是你的时。

如果您正在使用django-1.3的基于类的视图,而不是将许多变量传递给urls.py中的函数,您可以覆盖相应的感兴趣的方法,这提供了两全其美的优势。 - 更少的代码和更多的控制。

答案 1 :(得分:3)

是否使用通用视图是您的特权。虽然您可能会发现自己编写重复的视图逻辑,但它不会给您带来任何麻烦。你可以考虑在你的views.py中使用包装/子类通用视图(通常你会想要自定义它们),这样可以使你的urls.py和所有视图保持在同一个地方。

答案 2 :(得分: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保持清洁