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):