1 Commits

Author SHA1 Message Date
Mark
8138acb7f7 feat: replace hardcoded navigation with CMS-managed models
Some checks failed
CI / nightly-e2e (pull_request) Has been skipped
CI / deploy (pull_request) Has been skipped
CI / ci (pull_request) Failing after 14s
CI / pr-e2e (pull_request) Failing after 1m19s
Replace static nav/footer links with Wagtail-managed NavigationMenuItem
and SocialMediaLink orderables on SiteSettings. Unpublished pages are
automatically excluded from rendering, fixing the dead-link problem.

- Extend SiteSettings with site_name, tagline, footer_description,
  copyright_text branding fields
- Add NavigationMenuItem orderable (link_page/link_url, show_in_header,
  show_in_footer, sort_order) with automatic live-page filtering
- Add SocialMediaLink orderable with platform icon templates
- New template tags: get_nav_items, get_social_links
- Update nav.html and footer.html to render from CMS data
- Data migration seeds existing hardcoded values for zero-change deploy
- Update seed_e2e_content command for test/dev environments
- 18 new tests covering models, template tags, and rendered output

Closes #32

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-02 18:45:03 +00:00
3 changed files with 6 additions and 15 deletions

View File

@@ -150,10 +150,7 @@ class Command(BaseCommand):
]
if article_index_page:
nav_items.append(
NavigationMenuItem(
settings=settings, link_page=article_index_page,
link_title="Articles", sort_order=1,
)
NavigationMenuItem(settings=settings, link_page=article_index_page, link_title="Articles", sort_order=1)
)
if about_page:
nav_items.append(
@@ -164,15 +161,8 @@ class Command(BaseCommand):
if not SocialMediaLink.objects.filter(settings=settings).exists():
SocialMediaLink.objects.bulk_create(
[
SocialMediaLink(
settings=settings, platform="twitter",
url="https://twitter.com/nohypeai",
label="Twitter (X)", sort_order=0,
),
SocialMediaLink(
settings=settings, platform="rss",
url="/feed/", label="RSS Feed", sort_order=1,
),
SocialMediaLink(settings=settings, platform="twitter", url="https://twitter.com/nohypeai", label="Twitter (X)", sort_order=0),
SocialMediaLink(settings=settings, platform="rss", url="/feed/", label="RSS Feed", sort_order=1),
]
)

View File

@@ -6,6 +6,7 @@ from wagtail.admin.panels import FieldPanel, InlinePanel, MultiFieldPanel
from wagtail.contrib.settings.models import BaseSiteSetting, register_setting
from wagtail.models import Orderable
SOCIAL_ICON_CHOICES = [
("twitter", "Twitter / X"),
("github", "GitHub"),

View File

@@ -1,7 +1,7 @@
import pytest
from wagtail.models import Site
from apps.blog.models import AboutPage, ArticleIndexPage
from apps.blog.models import AboutPage, ArticleIndexPage, HomePage
from apps.core.models import NavigationMenuItem, SiteSettings, SocialMediaLink
@@ -133,7 +133,7 @@ class TestSocialMediaLink:
def test_ordering(self, site_with_nav):
links = list(site_with_nav.social_links.all().order_by("sort_order"))
assert [link.platform for link in links] == ["twitter", "rss"]
assert [l.platform for l in links] == ["twitter", "rss"]
@pytest.mark.django_db