gpt4 book ai didi

django - 基于类的通用 View 额外上下文

转载 作者:行者123 更新时间:2023-12-04 01:22:27 27 4
gpt4 key购买 nike

在基于类的 View 之前,有一个 extra_context 关键字可以在 urlsconf 中传递。
https://docs.djangoproject.com/en/1.3/topics/generic-views/#adding-extra-context

现在有了基于类的通用 View ,如果我们想做同样的事情,我们必须对通用 View 进行子类化
https://docs.djangoproject.com/en/1.3/topics/class-based-views/#adding-extra-context

如果我们想要一些简单的东西,并且我们使用通用的 CreateView 和 UpdateView。这种方法将强制子类化以前微不足道的东西。更重要的是,我们必须打破 DRY 原则,做两次。

为什么会这样?
有什么理由不能将额外的上下文直接传递给模板吗?

谢谢

最佳答案

经过太多思考,唯一的答案是不,该功能已被删除。

并且文档没有提到“已删除的功能”,也没有解释为什么会这样。

但是为了让我的生活更轻松,我听取了@aidan 的建议并进行了一些修改

class ExtraContext(object):
extra_context = {}

def get_context_data(self, **kwargs):
context = super(ExtraContext, self).get_context_data(**kwargs)
context.update(self.extra_context)
return context

class ExtraListView(ExtraContext, ListView):
pass

class ExtraDetailView(ExtraContext, DetailView):
pass

class ExtraUpdateView(ExtraContext, UpdateView):
pass

class ExtraCreateView(ExtraContext, CreateView):
pass

class ExtraDeleteView(ExtraContext, DeleteView):
pass

class ExtraCloneView(ExtraUpdateView):
def post(self, request, *args, **kwargs):
return ExtraCreateView.as_view(model=self.model,
template_name=self.template_name,
extra_context=self.extra_context)(request, *args, **kwargs)

现在我有了可以直接在 URLSconf 中使用的半通用 View ,并将 extra_context dict 传递给 as_view() 调用
url(r'^camera/(?P<pk>\d+)/$', 
views.ExtraDetailView.as_view(model=models.Camera,
extra_context={'action_type': 'detail', 'mod_name' : 'camera'},
template_name='cameras/camera_detail.html'),
name='camera_detail'),

关于django - 基于类的通用 View 额外上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14817326/

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