【发布时间】:2022-01-03 14:08:56
【问题描述】:
我已经实现了两个视图来根据choice_fields显示数据,但是我有两个视图,视图和模板中的逻辑略有不同,我如何将它们组合成一个以便我处理DRY
views.py:
class View1(LoginRequiredMixin,TemplateView):
template_name = 'temp1.html'
def get_context_data(self, **kwargs):
context = super(View1,self).get_context_data(**kwargs)
context['progress'] = self.kwargs.get('progress', 'in_progress')
if context['progress'] == 'in_progress':
context['objects'] = Model.objects.filter(progress='in_progress')
else:
context['objects'] = Model.objects.filter(progress__iexact=context['progress'], accepted=self.request.user)
return context
class View2(LoginRequiredMixin,TemplateView):
template_name = 'temp2.html'
def get_context_data(self, **kwargs):
context = super(View2,self).get_context_data(**kwargs)
context['progress'] = self.kwargs.get('progress', 'in_progress')
if context['progress'] == 'in_progress':
context['objects'] = Model.objects.filter(progress='in_progress',created = self.request.user)
else:
context['objects'] = Model.objects.filter(progress__iexact=context['progress'], created_by=self.request.user)
return context
【问题讨论】:
-
您可以创建一个视图并覆盖 get_context_data 方法以返回不同的查询集,然后覆盖 get_template_names 方法以返回不同的模板
标签: django django-models django-views django-templates django-class-based-views