2016-04-13 21 views
1

Çok benzer görünümler ve şablonlar için 3 tane görünümüm var.Django'daki görünümler arasında içerik paylaşın mı?

Kodum tekrarlı oluyor ve Django DRY yaklaşımını takip ediyor gibi görünmüyor.

Views.py bu işlemek için doğru yoldur

@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) 

? normal, ama çözüm gerçekten önemsiz

@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

Sınıf tabanlı görünümler vardır, genel bir görünüme sahip olabilir ve alt sınıfı veya karmaları kullanabilirsiniz https://docs.djangoproject.com/en/1.9/topics/class-based-views/intro/ – serg

cevap

1

, bir fonksiyonun içine ayıklamak ve sadece geçebileceği: Shang Wang'ın tavsiyesi bu şimdi nasıl göründüğünü aşağıdadır

Düzenleme

Bu durumda costumer_profile_form, registration gibi sonuçları üretmek için gereken parametreler. Sonra işlevi çağırırsınız ve bu olması gerekir.

İlgili konular