Я только начал переходить от представлений на основе функций к представлениям на основе классов, поскольку я все больше осознаю преимущества последних, особенно в том, что касается модульности, которую вы можете достичь с помощью миксинов.
Однако, поскольку CBV и Mixins все еще довольно новы для меня, я хотел проверить, правильно ли я понимаю основные понятия c:
Пример:
class ReportingMixin1(object):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['reportingmixin1_context'] = 'test1'
return context
class ReportingMixin2(object):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['reportingmixin2_context'] = 'test2'
return context
class MyTemplateView(ReportingMixin1, ReportingMixin2, TemplateView):
template_name = 'test4.html'
У меня следующие вопросы:
- С представлениями на основе функций я бы сделал
context = {'reportingmixin1': 'test1}
, но я вижу, что с представлениями на основе классов это всегда делается с помощью context['reportingmixin1'] = 'test1
. Почему это так? Я предполагаю, что одной из причин является то, что при объединении нескольких миксинов в TemplateView (как в коде в моем примере), но с context = {'reportingmixin1': 'test1}
и context = {'reportingmixin2': 'test2}
я бы инициировал или переопределил контекстный словарь в каждом миксине, так что у вас был бы только доступ к контекстные ключи, которые я определил в своем миксине, который называется последним? - Что конкретно делает
context = super().get_context_data(**kwargs)
? Я прочитал, что «сначала вызывается базовая реализация для получения контекста» - но что это означает в точности? - Когда я комбинирую несколько Mixins в моем представлении Template шаблонов, как показано в моем примере кода в
MyTemplateView
, Я могу получить доступ ко всем контекстным ключам в моей форме шаблона, все мои миксины, верно?