Попытка сохранить 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
Вернуться на верх