'NoneType' object has no attribute 'attrs' when upgrading to 2.0.0
rixx opened this issue · 2 comments
rixx commented
I just tried upgrading my project to django-bootstrap 2.0.0, and encountered the following error when loading websites.
Traceback (most recent call last):
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/core/handlers/base.py", line 145, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/core/handlers/base.py", line 143, in _get_response
response = response.render()
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/response.py", line 105, in render
self.content = self.rendered_content
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/response.py", line 83, in rendered_content
return template.render(context, self._request)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/base.py", line 171, in render
return self._render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/test/utils.py", line 95, in instrumented_test_render
return self.nodelist.render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/test/utils.py", line 95, in instrumented_test_render
return self.nodelist.render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/test/utils.py", line 95, in instrumented_test_render
return self.nodelist.render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/django/template/library.py", line 192, in render
output = self.func(*resolved_args, **resolved_kwargs)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/bootstrap4/templatetags/bootstrap4.py", line 627, in bootstrap_field
return render_field(*args, **kwargs)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/bootstrap4/forms.py", line 39, in render_field
return renderer_cls(field, **kwargs).render()
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/bootstrap4/renderers.py", line 84, in render
return mark_safe(self._render())
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/bootstrap4/renderers.py", line 515, in _render
html = self.post_widget_render(html)
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/bootstrap4/renderers.py", line 363, in post_widget_render
html = self.list_to_class(html, "checkbox")
File "/home/rixx/.local/share/virtualenvs/pretalx/lib/python3.8/site-packages/bootstrap4/renderers.py", line 341, in list_to_class
label.input.attrs["class"] = label.input.attrs.get("class", []) + ["form-check-input"]
AttributeError: 'NoneType' object has no attribute 'attrs'
This is a direct regression to #181, where django-bootstrap4 assumes that all inputs have to be inside labels (which is not idiomatic or at least not required in HTML).
dyve commented
Thanks. Apparently there is no test on this regression. Will look into that.
The major version dump in 2 is because of the drop n support fro Python and Django versions. You should be fine with django-bootstrap4<2
.
dyve commented
Is there any chance you can provide a breaking test? In v1.1.1 we fixed it based on symptoms, but a breaking test would be much better.
Copy/paste here is fine if you do not want to do a PR.