KISS
Если перед тобой типовая задача, которая реализуется в 1-5 строк на CBV -> используем CBV
Если ты уже видишь, как будешь пилить из CBV пятиетажное наследование для "упрощения" -> FBV
Совмещать подходы можно через функцию, в которой будет добавление необходимого контекста
def get_common_context():
# do something
return {'answer': 42, 'foo': 'bar'}
def index_page(request):
context = get_common_context()
context['buzz'] = 123
return render(request, 'index.html', context)
class MyCommonContext(ContextMixin):
def get_context_data(self, **kwargs):
context = super(RandomNumberView, self).get_context_data(**kwargs)
# тут нужно определиться, какой контекст главнее и тот должен быть последним
context.update(get_common_context())
context['buzz'] = 123
return context
class ArticleDetailView(MyCommonContext, DetailView):
model = Article