minor: design adjust (6) - update breadcrumb navigation

This commit is contained in:
2026-09-13 01:28:07 +03:00
parent 28556f0b12
commit 49542cd49c
5 changed files with 114 additions and 42 deletions
+16
View File
@@ -567,3 +567,19 @@ class TbBlogPost(models.Model):
def get_absolute_url(self) -> str:
"""Возвращает канонический URL статьи блога."""
return f"/blog/{self.slug}" if self.slug else f"/blog/{self.pk}"
@property
def blog_nav_title(self) -> str:
"""Детерминированный выбор названия раздела блога для навигации на основе ID статьи."""
nav_titles = (
"Блог Мозгоклюя",
"Записки Гипножабы",
"Дневник Мозговых Перцепторов",
"Хроники психо-резонанса",
"Мемуары астрального архива",
"Манифесты волновой матрицы",
"Бортовой журнал транс-погружения",
)
if not self.id:
return nav_titles[0]
return nav_titles[self.id % len(nav_titles)]
+13 -1
View File
@@ -1386,7 +1386,7 @@ class BlogPostModelAndAdminTests(BaseMediaTestCase):
self.assertContains(resp_parent, "Глава 1: Первичная модуляция")
self.assertContains(resp_parent, "Глава 2: Фазовый сдвиг матрицы")
# 2. Проверка первой главы (связанный SVG, ссылка на родителя, следующая глава)
# 2. Проверка первой главы (связанный SVG, ссылка на родителя, следующая глава, хлебные крошки и JSON-LD)
resp_ch1 = self.client.get(f"/blog/{ch1.slug}")
self.assertEqual(resp_ch1.status_code, 200)
self.assertContains(resp_ch1, "Глава 1: Первичная модуляция")
@@ -1399,6 +1399,18 @@ class BlogPostModelAndAdminTests(BaseMediaTestCase):
self.assertContains(resp_ch1, "Следующая глава цикла")
self.assertContains(resp_ch1, "Глава 2: Фазовый сдвиг матрицы")
# Проверка хлебных крошек
self.assertContains(resp_ch1, 'aria-label="Хлебные крошки"')
self.assertContains(resp_ch1, ch1.blog_nav_title)
self.assertContains(resp_ch1, "Глава 1 из 2")
self.assertContains(resp_ch1, 'aria-current="page"')
# Проверка JSON-LD BreadcrumbList
self.assertContains(resp_ch1, '"@type": "BreadcrumbList"')
self.assertContains(resp_ch1, '"name": "Главная"')
self.assertContains(resp_ch1, '"name": "Хроники гипноза"')
self.assertContains(resp_ch1, series_parent.s_title)
# 3. Проверка второй главы (ссылка назад на главу 1)
resp_ch2 = self.client.get(f"/blog/{ch2.slug}")
self.assertEqual(resp_ch2.status_code, 200)
+1
View File
@@ -710,6 +710,7 @@ def blog_detail(request: HttpRequest, slug: str) -> HttpResponse:
"svg_stats": svg_stats,
"series_parent": series_parent,
"series_posts": series_posts,
"series_total_count": len(series_posts) if series_posts else 0,
"prev_post": prev_post,
"next_post": next_post,
}