django-基类的一些写法
作者:互联网
Django给我们提供了很多基于类的通用视图(Class Based View), 可以帮我们简化执行以下操作代码:
get_queryset get_context_data get_object ListView展示对象列表 DatailView展示某个对象的详细信息
删除某个对象 DeleteView
正如其名,当我们使用Django 只带的ListView展示所有对象列表的时候,ListView默认返回Model.objects.all()
我们也可以在DetailView和EditView中定义get_queryset(),一旦定义了该方法那么DetailView返回的一个具体对象只会从queryset里查找。
get_context_data()
get_context_data可以用于给模板传递模型以外的内容或参数,非常有用。例如现在的时间并不属于Article模型。如果你想把现在的时间传递给模板,你还可以通过重写get_context_data方法(如下图所示)。因为调用了父类的方法,
然而上述代码可能满足不了你的需求。比如你希望一个用户只能查看或编辑自己发表的文章对象。当用户查看别人的对象时,返回http 404错误。这时候你可以通过更具体的get_object()方法来返回一个更具体的对象。代码如下:
from django.views.generic import DetailView
from django.http import Http404
from .models import Article
from django.utils import timezone
class ArticleDetailView(DetailView): queryset = Article.objects.all().order_by("-pub_date") template_name = 'blog/article_detail.html' context_object_name = 'article' def get_object(self, queryset=None): obj = super().get_object(queryset=queryset) if obj.author != self.request.user: raise Http404() return obj
标签:get,object,queryset,django,context,基类,import,写法,DetailView 来源: https://www.cnblogs.com/wwzy/p/13806581.html