from typing import Any, Dict from django.views.generic.base import ContextMixin from .services import track_page_view class PageViewTrackingMixin(ContextMixin): """ Миксин для отслеживания просмотров страниц. Добавляет трекинг при вызове view. """ def dispatch(self, request, *args, **kwargs): # Отслеживаем просмотр перед обработкой запроса track_page_view(request) return super().dispatch(request, *args, **kwargs) class MenuContextMixin(ContextMixin): """ Миксин для добавления меню в контекст. """ menu = [ {'title': "Главная", 'url_name': 'home'}, {'title': "Проекты", 'url_name': 'solution'}, {'title': "Статьи", 'url_name': 'blog'}, {'title': "Отзывы", 'url_name': 'recall'}, {'title': "Обо мне", 'url_name': 'about'} ] def get_context_data(self, **kwargs: Any) -> Dict[str, Any]: context = super().get_context_data(**kwargs) context['menu'] = self.menu return context