Несмотря на то, что в документах Django действительно говорится, что основанные на функции универсальные представления теперь устарели Я думаю, что единственная причина для переключения будет, если вы пишете меньше кода.
Если вы по-прежнему настроены на переключение, вам необходимо сначала определить, какие представления или миксины на основе классов являются наиболее подходящими (один объект, несколько объектов, дата, формы и т. Д.).Если условное выражение использовалось для выбора функции, которая возвращает различные контекстные данные / шаблон для представления представлению, вы можете переместить условное выражение в переопределенное значение get_queryset|get_context_data|get_object|get_template_names
в зависимости от вашего варианта использования.
Например,
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(BaseView, self).get_context_data(**kwargs)
# Add in the publisher
if some_condition():
context['some_data'] = ...
else:
context['other_data'] = ...
return context
Если все остальное терпит неудачу, и вы все еще решаете иметь представления на основе классов, вы, вероятно, также можете переопределить get(self, request, *args, **kwargs)
и выполнить переключение там на соответствующийметод. подробные документы становятся лучше, но я все еще копался в исходном коде, чтобы выяснить, как добиться того, чего я хочу.