I need your help!
Всем доброго дня! Я новичок в Django и, возможно, мой вопрос будет очень глупым, но всё же...
Я начал изучать Django по книге Django: практика создания Web-сайтов на Python (Владимир Дронов).
Есть одна загвоздка с выводом списка категорий товаров в "меню слева".
Я выделил класс CategoryListMixin в отдельный модуль "generic/mixins":
from django.views.generic.base import ContextMixin
from categories.models import Category
class CategoryListMixin(ContextMixin):
def get_contex_data(self, **kwagrs):
context = super(CategoryListMixin, self).get_contex_data(**kwagrs)
context["current_url"] = self.request.path
context["categories"] = Category.objects.all()
return context
А вот обработчик главной страницы:
from django.views.generic.base import TemplateView
from generic.mixins import CategoryListMixin
from news.models import New
class MainPageView(TemplateView, CategoryListMixin):
template_name = "mainpage.html"
last_news = New.objects.all()[0:2]
def get_context_data(self, **kwargs):
context = super(MainPageView, self).get_context_data(**kwargs)
context["news"] = self.last_news
return context
Т.е. по идее, при вызове MainPageView.get_context_data(), вызовется CategoryListMixin.get_context_data() и в context["categories"] будет список категорий...
Но его там нет. Как мне кажется, эта функция даже не вызывается. (Print`ы внутри неё не отрабатывают...)
Пробовал вместо
context = super(MainPageView, self).get_context_data(**kwargs)
Вызывать так:
context = CategoryListMixin.get_context_data(self, **kwargs)
Так же без результатов.
А вот если вынести строку
context["categories"] = Category.objects.all()
в класс MainPageView, все ок - список категорий появляются.
Окружение:
- Python 3.5.4
- Django 2.1.2