diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bd35f0..275f37b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed -- ... +- The `TypeError` that was raised in `render_html` when `get_context_data` returned `None` was removed. This change is Wagtail-compatible. ([#30](https://github.com/tbrlpld/laces/pull/30)) ## [0.1.1] - 2024-02-10 diff --git a/laces/components.py b/laces/components.py index f205d8c..f8052a4 100644 --- a/laces/components.py +++ b/laces/components.py @@ -45,9 +45,6 @@ def render_html( `django.utils.safestring.SafeString` instance. """ context_data = self.get_context_data(parent_context) - if context_data is None: - raise TypeError("Expected a dict from get_context_data, got None") - template = get_template(self.template_name) return template.render(context_data) diff --git a/laces/tests/test_components.py b/laces/tests/test_components.py index 9492331..34b819f 100644 --- a/laces/tests/test_components.py +++ b/laces/tests/test_components.py @@ -152,21 +152,30 @@ def get_context_data( self.assertEqual(result, "Hello World") - def test_render_html_when_get_context_data_returns_None(self) -> None: + def test_render_html_when_get_context_data_returns_none(self) -> None: """ Test `render_html` method when `get_context_data` returns `None`. - The `render_html` method raises a `TypeError` when `None` is returned from - `get_context_method`. This behavior was present when the class was extracted - from Wagtail. It is not totally clear why this specific check is needed. By - default, the `get_context_data` method provides and empty dict. If an override - wanted to `get_context_data` return `None`, it should be expected that no - context data is available during rendering. The underlying `template.render` - method does not seem to be ok with `None` as the provided context. + Originally, the `render_html` method explicitly raised a `TypeError` when + `None` was returned from `get_context_method`. + + I was not able to find out why this check was put in place. The usage of + components in Wagtail does not reveal any issues when the raising of the + exception is removed. Also, the following template rendering (with + `django.template.base.Template.render`) works just fine with the context being + `None`. + + It seems therefore safe to assume that this was a left-over without much current + need. + + This test is in place to prove that a component can behave as expected when the + `get_context_data` method returns `None`. """ # ----------------------------------------------------------------------------- class ExampleComponent(Component): + template_name = self.example_template_name + def get_context_data( self, parent_context: "Optional[RenderContext]" = None, @@ -175,9 +184,11 @@ def get_context_data( return None # ----------------------------------------------------------------------------- + self.set_example_template_content("Hello") + + result = ExampleComponent().render_html() - with self.assertRaises(TypeError): - ExampleComponent().render_html() + self.assertEqual(result, "Hello") def test_media_defined_through_nested_class(self) -> None: """