Попытка сохранить DRY в Django: Рефакторинг повторяющегося кода в Views
У меня есть множество различных представлений списков для таблиц. Каждое представление отличается только используемым шаблоном. Моя единственная успешная стратегия заключается в использовании декоратора, содержащего общий код, а затем возвращающего 'pass' для функции представления. Проблема, с которой я сталкиваюсь, заключается в том, что если я хочу добавить индивидуальный код в конкретное представление списка, который отличается от других. Есть ли лучший способ сделать это?
Вот мой декоратор:
def my_decorator(html=""):
def my_decorator(*args, **kwargs):
def wrapper(request, *args, **kwargs):
bacteria = Bacteria.objects.all()
bacteria_count = bacteria.count()
bacteriaFilter = BacteriaFilter(request.GET, queryset=bacteria)
bacteria = bacteriaFilter.qs
remaining = bacteria.count()
common_tags = Bacteria.tags.most_common()[:8]
'''
context = {"bacteria": bacteria, 'common_tags': common_tags, 'bacteria_count': bacteria_count,
'bacteriaFilter': bacteriaFilter, 'remaining': remaining}
'''
return render(request, html, locals())
return wrapper
return my_decorator
А вот несколько примеров (у меня более 15 таблиц) использования функций просмотра списка:
@my_decorator(html="bacteria/generalPhysiology.html")
def general_physiology_view(request):
pass
@my_decorator(html="bacteria/enzymeActiveTable.html")
def enzyme_activity_table_view(request):
pass