基于类的通用视图额外的上下文

2024-05-14

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

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

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

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

Thanks


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

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

但为了让我的生活更轻松,我听取了@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)    

现在我有了半通用视图,可以直接在 URLconf 中使用,并将额外的上下文字典传递给 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'),
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于类的通用视图额外的上下文 的相关文章

随机推荐