From 61c7af35c1c8cb3dc6eceea265f170bfb962530b Mon Sep 17 00:00:00 2001 From: NikDizell Date: Thu, 26 Feb 2026 20:00:28 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D1=85=D0=BB=D0=B5=D0=B1=D0=BD=D1=8B=D0=B5=20=D0=BA=D1=80=D0=BE?= =?UTF-8?q?=D1=88=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blog/views.py | 30 ++++++++++++++++--- programmer/mixins.py | 23 +++++++++++++++ programmer/templates/programmer/base.html | 22 ++++++++++++-- programmer/views.py | 35 ++++++++++++++++++----- 4 files changed, 96 insertions(+), 14 deletions(-) diff --git a/blog/views.py b/blog/views.py index 4c7bfbb..5b3b4ae 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,4 +1,4 @@ -from programmer.mixins import MenuContextMixin +from programmer.mixins import MenuContextMixin, BreadcrumbMixin from django.views.generic import ListView, DetailView, CreateView from django.urls import reverse_lazy from django.contrib import messages @@ -15,13 +15,22 @@ from django.shortcuts import redirect from django.contrib.admin.views.decorators import staff_member_required -class ArticleListView(MenuContextMixin, ListView): +class ArticleListView(MenuContextMixin, BreadcrumbMixin, ListView): """Список статей""" model = Article template_name = 'blog/article_list.html' context_object_name = 'articles' paginate_by = 10 + def get_breadcrumbs(self): + if 'category_slug' in self.kwargs: + category = Category.objects.get(slug=self.kwargs['category_slug']) + return [ + {'title': 'Статьи', 'url_name': 'blog:article_list'}, + {'title': category.name, 'url_name': None}, + ] + return [{'title': 'Статьи', 'url_name': None}] + def get_queryset(self): category_slug = self.kwargs.get('category_slug') return get_published_articles(category_slug) @@ -51,13 +60,26 @@ class ArticleListView(MenuContextMixin, ListView): return super().dispatch(*args, **kwargs) -class ArticleDetailView(MenuContextMixin, DetailView, CreateView): +class ArticleDetailView(MenuContextMixin, BreadcrumbMixin, DetailView, CreateView): """Детальная страница статьи + форма комментария""" model = Article template_name = 'blog/article_detail.html' context_object_name = 'article' form_class = CommentForm + def get_breadcrumbs(self): + article = self.get_object() + return [ + {'title': 'Статьи', 'url_name': 'blog:article_list'}, + { + 'title': article.category.name, + 'url_name': 'blog:category_detail', + 'category_slug': article.category.slug, + # 'url_args': [article.category.slug] + }, + {'title': article.title, 'url_name': None}, + ] + def get_object(self, queryset=None): article = get_article_by_slug(self.kwargs['slug']) if article is None: @@ -110,7 +132,7 @@ class ArticleDetailView(MenuContextMixin, DetailView, CreateView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({ - 'title': "Статии | Инструкции", + 'title': "Статьи | Инструкции", 'meta_description': ( "Инструкции по работе в 1С и бизнес-решения" "инструкции, статьи помощь 1С." diff --git a/programmer/mixins.py b/programmer/mixins.py index f4743ee..671a2a8 100644 --- a/programmer/mixins.py +++ b/programmer/mixins.py @@ -48,3 +48,26 @@ class MenuContextMixin(ContextMixin): return context +class BreadcrumbMixin(ContextMixin): + """ + Миксин для добавления хлебных крошек в контекст. + В дочерних классах нужно определить метод get_breadcrumbs(). + """ + breadcrumbs = None + + def get_breadcrumbs(self): + """ + Должен возвращать список словарей: + [{'title': 'Название', 'url_name': 'url_name', 'url_args': [...], 'url_kwargs': {...}}, ...] + Последний элемент без url_name (текущая страница). + """ + if self.breadcrumbs is not None: + return self.breadcrumbs + return [] + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['breadcrumbs'] = self.get_breadcrumbs() + return context + + diff --git a/programmer/templates/programmer/base.html b/programmer/templates/programmer/base.html index 50d695b..5552d87 100644 --- a/programmer/templates/programmer/base.html +++ b/programmer/templates/programmer/base.html @@ -566,10 +566,26 @@
{% block breadcrumbs %} -