diff --git a/innovedus_cms/home/templates/home/article_page.html b/innovedus_cms/home/templates/home/article_page.html index 8f4b3ad..f2891ab 100644 --- a/innovedus_cms/home/templates/home/article_page.html +++ b/innovedus_cms/home/templates/home/article_page.html @@ -19,7 +19,7 @@ Hashtags: diff --git a/innovedus_cms/home/templates/home/hashtag_page.html b/innovedus_cms/home/templates/home/hashtag_page.html new file mode 100644 index 0000000..287f677 --- /dev/null +++ b/innovedus_cms/home/templates/home/hashtag_page.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} +{% load wagtailcore_tags %} +{% block content %} + + + {% include "home/includes/page-article-list.html" %} +{% endblock %} diff --git a/innovedus_cms/home/views.py b/innovedus_cms/home/views.py new file mode 100644 index 0000000..a64bfce --- /dev/null +++ b/innovedus_cms/home/views.py @@ -0,0 +1,43 @@ +from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator +from django.shortcuts import get_object_or_404, render + +from taggit.models import Tag +from wagtail.models import Site + +from .models import ArticlePage, PAGE_SIZE + + +def hashtag_search(request, slug): + tag = get_object_or_404(Tag, slug=slug) + articles = ( + ArticlePage.objects.live() + .filter(tags__slug=slug) + .order_by("-date") + ) + + paginator = Paginator(articles, PAGE_SIZE) + page_number = request.GET.get("page") + + try: + page_obj = paginator.page(page_number) + except PageNotAnInteger: + page_obj = paginator.page(1) + except EmptyPage: + page_obj = paginator.page(paginator.num_pages) + + site = Site.find_for_request(request) + site_root = site.root_page if site else None + + context = { + "tag": tag, + "category_sections": [ + { + "title": f"#{tag.name}", + "items": page_obj, + "url": request.path, + } + ], + "site_root": site_root, + } + + return render(request, "home/hashtag_page.html", context) diff --git a/innovedus_cms/mysite/urls.py b/innovedus_cms/mysite/urls.py index c2e8a0c..b60d225 100644 --- a/innovedus_cms/mysite/urls.py +++ b/innovedus_cms/mysite/urls.py @@ -7,11 +7,14 @@ from wagtail import urls as wagtail_urls from wagtail.documents import urls as wagtaildocs_urls from search import views as search_views +from home import views as home_views urlpatterns = [ path("django-admin/", admin.site.urls), path("admin/", include(wagtailadmin_urls)), path("documents/", include(wagtaildocs_urls)), + # use so Unicode tag slugs (e.g. 台北美食) still resolve + path("tags//", home_views.hashtag_search, name="hashtag_search"), path("search/", search_views.search, name="search"), ]