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:
{% for tag in tags %}
- - #{{ tag }}
+ - #{{ tag }}
{% endfor %}
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"),
]