1
非常によく似たビューとテンプレートのビューが3つあります。Djangoのビュー間でコンテキストを共有しますか?
私のコードは繰り返していて、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)
クラスベースのビューがあり、1つの汎用ビューを持つことができ、それをサブクラス化するか、またはミックスインを使用できます。https://docs.djangoproject.com/ja/1.9/topics/class-based-views/intro/ – serg