Fix empty-category nav and route behavior
Use category-state-driven queries for nav and category listing routes, and add regression tests for empty but valid categories. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -49,10 +49,7 @@ class HomePage(Page):
|
||||
id__in=ArticlePage.objects.live().public().values_list("tags__id", flat=True)
|
||||
).distinct().order_by("name")
|
||||
)
|
||||
category_ids = ArticlePage.objects.live().public().values_list("category_id", flat=True)
|
||||
ctx["available_categories"] = Category.objects.filter(show_in_nav=True, id__in=category_ids).order_by(
|
||||
"sort_order", "name"
|
||||
)
|
||||
ctx["available_categories"] = Category.objects.filter(show_in_nav=True).order_by("sort_order", "name")
|
||||
return ctx
|
||||
|
||||
|
||||
@@ -76,9 +73,7 @@ class ArticleIndexPage(RoutablePageMixin, Page):
|
||||
def get_listing_context(self, request, active_category=None):
|
||||
tag_slug = request.GET.get("tag")
|
||||
articles = self.get_articles()
|
||||
all_articles = articles
|
||||
category_ids = all_articles.values_list("category_id", flat=True)
|
||||
available_categories = Category.objects.filter(id__in=category_ids).order_by("sort_order", "name")
|
||||
available_categories = Category.objects.order_by("sort_order", "name")
|
||||
category_links = [
|
||||
{"category": category, "url": self.get_category_url(category)}
|
||||
for category in available_categories
|
||||
@@ -111,9 +106,7 @@ class ArticleIndexPage(RoutablePageMixin, Page):
|
||||
|
||||
@route(r"^category/(?P<category_slug>[-\w]+)/$")
|
||||
def category_listing(self, request, category_slug):
|
||||
category_ids = self.get_articles().values_list("category_id", flat=True)
|
||||
category_qs = Category.objects.filter(id__in=category_ids)
|
||||
category = get_object_or_404(category_qs, slug=category_slug)
|
||||
category = get_object_or_404(Category, slug=category_slug)
|
||||
return self.render(request, context_overrides=self.get_listing_context(request, active_category=category))
|
||||
|
||||
def get_context(self, request, *args, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user