其他分享
首页 > 其他分享> > django-基类的一些写法

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