在 Django 中的视图之间共享上下文?
Posted
技术标签:
【中文标题】在 Django 中的视图之间共享上下文?【英文标题】:Share context between views in Django? 【发布时间】:2016-04-13 20:43:54 【问题描述】:对于非常相似的视图和模板,我有 3 个视图。
我的代码变得重复,它似乎没有遵循 Django DRY 方法。
Views.py
@login_required
def registrations_check1_detail(request, registration_pk):
registration = get_object_or_404(Registration, pk=registration_pk)
costumer_profile_form = forms.CostumerProfileForm()
# THIS CONTEXT IS REPEATED ACROSS MANY OF MY VIEWS
request_context =
'registration': registration,
'status': Registration.STATUS_CHOICES,
'costumer_profile_form': costumer_profile_form,
'duration_form': pf.DurationForm(),
'REG_DURATION_CHOICES' : Duration.REG_DURATION_CHOICES,
'EXT_DURATION_CHOICES' : Duration.EXT_DURATION_CHOICES,
'is_editable': editable_fields_perm(request.user, registration)
return render(request, 'profiles/registrations_check1_detail.html', request_context)
@login_required
def finance_review_detail(request, registration_pk):
costumer_profile_form = forms.CostumerProfileForm()
registration = get_object_or_404(Registration, pk=registration_pk)
request_context =
'registration': registration,
'costumer_profile_form': costumer_profile_form,
'duration_form': pf.DurationForm(),
'REG_DURATION_CHOICES' : Duration.REG_DURATION_CHOICES,
'EXT_DURATION_CHOICES' : Duration.EXT_DURATION_CHOICES,
'is_editable': editable_fields_perm(request.user, registration)
return render(request, 'profiles/finance_review_detail.html', request_context)
处理这个问题的正确方法是什么?
编辑
按照尚旺的建议,现在是这样的:
@login_required
def registration_detail(request, registration_pk):
request_context = _registration_context(registration_pk, request.user)
return render(request, 'profiles/registration_detail.html', request_context)
【问题讨论】:
有基于类的视图,可以有一个通用视图,然后将其子类化或使用 mixins docs.djangoproject.com/en/1.9/topics/class-based-views/intro 【参考方案1】:这很正常,但解决方案真的很简单,您可以将它们提取到一个函数中,并且只传递它需要产生结果的参数,例如costumer_profile_form
,registration
在这种情况下。然后你调用这个函数,应该就是它了。
【讨论】:
以上是关于在 Django 中的视图之间共享上下文?的主要内容,如果未能解决你的问题,请参考以下文章
在Javascript HTML中访问Django视图中的上下文变量(列表)[重复]