gpt4 book ai didi

基于 Django 类的 View 复合

转载 作者:行者123 更新时间:2023-12-03 23:57:12 25 4
gpt4 key购买 nike

我正在为一个项目使用 Django 1.3 的基于类的通用 View 。他们真的很好,但我想成为 DRYer。我有一个页面显示我们收到的新闻报道列表,另一个页面显示我们发布的文章列表。在概览页面上,我需要显示两个列表。我想创建一个复合 View ,它接受两个 View 并创建一个附加了两个查询集的上下文。

最佳答案

Kenzic能够通过执行以下操作来完成此操作:

复合 Material .py:

from django.views.generic.base import TemplateResponseMixin, View

class BaseCompositeView(TemplateResponseMixin, View):

composite_views = []

def get_composite_views(self):
return self.composite_views

def get_context_data(self, request, *args, **kwargs):
context = {}
composite_views = self.get_composite_views()
for composite_view in composite_views:
cls = composite_view[0]
try:
clsview = cls.as_view(**composite_view[1])
except IndexError:
clsview = cls.as_view()

view = clsview(request, *args, **kwargs)
context_data = view.context_data
context.update(context_data)

return context

def get(self, request, *args, **kwargs):
context = self.get_context_data(request, *args, **kwargs)
return self.render_to_response(context)

View .py:
from django.views.generic import TemplateView, ListView, DetailView
from composite import BaseCompositeView
from .models import *


class MediaCoverageList(ListView):
queryset = MediaCoverageItem.objects.order_by('-date')


class PressKitList(ListView):
queryset = PressKit.objects.all()


class NewsroomLanding(BaseCompositeView):
template_name = 'newsroom/landing.html'
composite_views = [
(MediaCoverageList,{
'paginate_by': 10,
},),
(PressKitList,)

]

关于基于 Django 类的 View 复合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com