2016-04-13 5 views
1

Ich habe 3 Ansichten für sehr ähnliche Ansichten und Vorlagen.Den Zusammenhang zwischen Ansichten in Django teilen?

Mein Code wird sich wiederholend und es scheint nicht zu folgen Django DRY Ansatz.

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) 

Welches ist die richtige Art und Weise zu handhaben ist?

bearbeiten

Nach Shang Wang Rat dies ist, wie es jetzt aussieht:

@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

Es gibt klassenbasierte Ansichten, kann eine allgemeine Ansicht haben und dann Unterklasse oder verwenden Sie Mixins https://docs.djangoproject.com/de/1.9/topics/class-based-views/intro/ – serg

Antwort

1

Das ist normal, aber die Lösung ist wirklich trivial, können Sie sie in eine Funktion extrahieren könnte und nur passieren in die Parameter, die es benötigt, um das Ergebnis wie costumer_profile_form, registration in diesem Fall zu erzeugen. Dann rufst du die Funktion an und das sollte es sein.

Verwandte Themen