对Django泛型视图有点困惑

2024-09-30 08:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题可能是非常基本的,我很抱歉在这里张贴这样的问题。不幸的是,我找不到合适的解决办法。 我有两个类,一个继承自generic.DetailView,另一个继承自generic.ListView。 除了获取Post模型的详细信息之外,我还想在同一个模板中调用一个查询来提取标记为必需的Post。不过,我对正确的方法有点困惑。如果有人能指导我,我会很感激的

from django.shortcuts import render
from django.views import generic
from .models import Post


class Details(generic.DetailView):
    model = Post

class EssentialPosts(generic.ListView):
    def getessentialposts(self):
        queryset = Post.objects.filter(essential=True).order_by('-created_on')
        return queryset


class PostDetail(Details , EssentialPosts):
    template_name = 'post-detail.html'

Tags: djangofrom模型import模板详细信息detailspost
2条回答

我认为最简单的解决方案可能只是一个通用视图,在该视图中执行逻辑并返回一个自定义上下文字典

其他选项可能是修改get_context_data以获得所需内容,或者在视图中执行一些额外的操作,如以下文档所示:https://docs.djangoproject.com/en/3.0/topics/class-based-views/generic-display/

from django.shortcuts import render
from django.views import View


class MyGenericVIew(View):
    initial = {'key': 'value'}
    template_name = 'my_template.html'

    def get(self, request, *args, **kwargs):
        all_posts = Post.objects.all()
        essential_posts = Post.objects.filter(essential=True)
        return render(request, 
                      self.template_name, 
                      {'essential_posts': essential_posts,
                       'all_posts': all_posts})

您可以执行以下操作:

class PostDetailView(DetailView):
     model = Post

     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
         context['essential_posts'] = Post.objects.filter(essential=True).order_by('-created_on')
         return context

相关问题 更多 >

    热门问题