基于类的视图Django



如何将此代码转换为基于类的代码

def detail_article(request, slug):
context = {
"article": get_object_or_404(Articles, slug=slug, state="p")
"slider" : Articles.objects.filter(state="p").order_by('-publish')[:20]
}
return render(request, "blogApp/detail_article.html", context)

我试过这个:

class ArticleDetail(DetailView):
context_object_name = 'slider'
def get_queryset(self):
return Articles.objects.filter(state="p").order_by('-publish')[:6]
def get_object(self):
slug = self.kwargs.get("slug")
return get_object_or_404(Articles, slug=slug, state="p")

但我得到了这个错误:"文章"对象是不可迭代的

而且我在滑块上的模板中也有for循环

问题出在这一行。

context_object_name = 'slider'

您的模板需要一个名为slider的对象。您可能应该命名对象上下文,然后使用类似的方法。

def get_context_data(self, *args, **kwargs): 
context = super().get_context_data(*args, **kwargs)
slug = self.kwargs.get("slug")
context["articles"] = get_object_or_404(Articles, slug=slug, state="p")        
return context 

您不需要get_queryset,因为查询集用于ListViewDetailView仅显示一个模型实例上的数据。这就是你想要的。

最新更新