From 4f5346e7a0d4f2e723cbf1b1f64f56b822578f9e Mon Sep 17 00:00:00 2001
From: Dmitriy Chukhin <6025153+dchukhin@users.noreply.github.com>
Date: Fri, 5 Dec 2025 17:33:08 -0500
Subject: [PATCH] add pattern config to template context, so it can be used in
template
---
.../templates/pattern_library/base.html | 2 +-
pattern_library/views.py | 7 +++
tests/templates/patterns/base.html | 2 +-
tests/tests/test_views.py | 51 ++++++++++++++++---
4 files changed, 54 insertions(+), 8 deletions(-)
diff --git a/pattern_library/templates/pattern_library/base.html b/pattern_library/templates/pattern_library/base.html
index 388fb263..e86dc793 100644
--- a/pattern_library/templates/pattern_library/base.html
+++ b/pattern_library/templates/pattern_library/base.html
@@ -6,7 +6,7 @@
- Django pattern library
+ {% block title %}{% if pattern_name %}{{ pattern_name }} | {% endif %}Django pattern library{% endblock %}
diff --git a/pattern_library/views.py b/pattern_library/views.py
index 99d1dccb..d9b717c4 100644
--- a/pattern_library/views.py
+++ b/pattern_library/views.py
@@ -101,6 +101,13 @@ def get(self, request, pattern_template_name=None):
if pattern_is_fragment:
context = self.get_context_data()
context["pattern_library_rendered_pattern"] = mark_safe(rendered_pattern)
+
+ # Add the pattern config to the context, so that name is available
+ # in the base template.
+ pattern_config = get_pattern_config(pattern_template_name)
+ context["pattern_config"] = pattern_config
+ context["pattern_name"] = pattern_config.get("name", "")
+
return self.render_to_response(context)
return HttpResponse(rendered_pattern)
diff --git a/tests/templates/patterns/base.html b/tests/templates/patterns/base.html
index 19f3358f..a7040de2 100644
--- a/tests/templates/patterns/base.html
+++ b/tests/templates/patterns/base.html
@@ -3,7 +3,7 @@
- {% block title %}Fragment{% endblock %}
+ {% block title %}{% if pattern_name %}{{ pattern_name }} | {% endif %}Django pattern library{% endblock %}
diff --git a/tests/tests/test_views.py b/tests/tests/test_views.py
index 0db616c1..04fe5fa5 100644
--- a/tests/tests/test_views.py
+++ b/tests/tests/test_views.py
@@ -113,11 +113,21 @@ def test_page(self):
self.assertContains(response, "Page")
def test_fragments(self):
- for template_name in [
- "patterns/atoms/test_atom/test_atom.html",
- "patterns/molecules/test_molecule/test_molecule.html",
- "patterns/molecules/test-molecule/test-molecule.html",
- ]:
+ test_cases = [
+ (
+ "patterns/atoms/test_atom/test_atom.html",
+ "Django pattern library",
+ ),
+ (
+ "patterns/molecules/test_molecule/test_molecule.html",
+ "Pretty name for test molecule | Django pattern library",
+ ),
+ (
+ "patterns/molecules/test-molecule/test-molecule.html",
+ "Django pattern library",
+ ),
+ ]
+ for template_name, expected_title in test_cases:
with self.subTest(template_name=template_name):
self.assertContains(
self.client.get(
@@ -126,7 +136,7 @@ def test_fragments(self):
kwargs={"pattern_template_name": template_name},
),
),
- "Fragment",
+ expected_title,
)
def test_fragment_extended_from_variable(self):
@@ -142,6 +152,35 @@ def test_fragment_extended_from_variable(self):
"base content - extended content",
)
+ def test_pattern_name_in_context(self):
+ """Test that pattern_name and pattern_config are added to context for fragments"""
+ # Test pattern with custom name from YAML
+ response = self.client.get(
+ reverse(
+ "pattern_library:render_pattern",
+ kwargs={
+ "pattern_template_name": "patterns/molecules/test_molecule/test_molecule.html"
+ },
+ )
+ )
+ self.assertEqual(response.status_code, 200)
+ self.assertContains(
+ response,
+ "Pretty name for test molecule | Django pattern library",
+ )
+
+ # Test pattern without custom name (should have empty pattern_name)
+ response = self.client.get(
+ reverse(
+ "pattern_library:render_pattern",
+ kwargs={
+ "pattern_template_name": "patterns/atoms/test_atom/test_atom.html"
+ },
+ )
+ )
+ self.assertEqual(response.status_code, 200)
+ self.assertContains(response, "Django pattern library")
+
class APIViewsTestCase(SimpleTestCase):
def test_renders_with_tag_overrides(self):