Refactor search view to improve query handling and pagination logic

This commit is contained in:
Warren Chen 2025-11-11 13:49:10 +09:00
parent 653847df6a
commit 97ddd2dfd1

View File

@ -2,6 +2,7 @@ from urllib.parse import urlencode
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.db.models import Q
from wagtail.models import Site from wagtail.models import Site
@ -16,12 +17,17 @@ def search(request):
results_count = 0 results_count = 0
if search_query: if search_query:
search_queryset = ArticlePage.objects.live().search(search_query) primary_qs = ArticlePage.objects.live().search(search_query)
paginator = Paginator(search_queryset, PAGE_SIZE) results_count = primary_qs.count()
results_page = paginator.get_page(page_number)
results_count = paginator.count if not results_count:
fallback_filter = Q(intro__icontains=search_query) | Q(body__icontains=search_query)
primary_qs = ArticlePage.objects.live().filter(fallback_filter).order_by("-date")
results_count = primary_qs.count()
if results_count: if results_count:
paginator = Paginator(primary_qs, PAGE_SIZE)
results_page = paginator.get_page(page_number)
query_string = urlencode({"query": search_query}) query_string = urlencode({"query": search_query})
category_sections = [ category_sections = [
{ {