#32681 closed Bug (fixed)
Variable lookup errors are logged rendering the admin index page if subtitle is not defined.
Reported by: | Zain Patel | Owned by: | Zain Patel |
---|---|---|---|
Component: | contrib.admin | Version: | 3.2 |
Severity: | Release blocker | Keywords: | admin, template |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
This looks like a bug introduced in Django 3.2 with the introduction of a new variable introduced in the base templates (django/contrib/admin/templates/base_site.html
) named subtitle.
This variable is passed in most places within the admin site, e.g in django/contrib/admin/options.py
Loading the admin index page with log-level debug shows the following exception/stack trace (that admittedly does not affect anything functional - simply clutters the logs):
Exception while resolving variable 'subtitle' in template 'admin/index.html'. Traceback (most recent call last): File "...lib/python3.7/site-packages/django/template/base.py", line 829, in _resolve_lookup current = current[bit] File "...lib/python3.7/site-packages/django/template/context.py", line 83, in __getitem__ raise KeyError(key) KeyError: 'subtitle' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "...lib/python3.7/site-packages/django/template/base.py", line 835, in _resolve_lookup if isinstance(current, BaseContext) and getattr(type(current), bit): AttributeError: type object 'RequestContext' has no attribute 'subtitle' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "...lib/python3.7/site-packages/django/template/base.py", line 843, in _resolve_lookup current = current[int(bit)] ValueError: invalid literal for int() with base 10: 'subtitle' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "...lib/python3.7/site-packages/django/template/base.py", line 850, in _resolve_lookup (bit, current)) # missing attribute django.template.base.VariableDoesNotExist: Failed lookup for key [subtitle] in
I believe this can be fixed by providing subtitle: None
in the AdminSite.each_context` method to default it to that. I am happy to create a PR for this.
On second though - instead of hardcoding subtitle
to None - potentially it should be a customisable option in the AdminSite itself, so:
class MySite(AdminSite): site_header = "blah" subtitle = "my subtitle"
?
Change History (14)
comment:1 by , 3 years ago
Description: | modified (diff) |
---|
comment:2 by , 3 years ago
Description: | modified (diff) |
---|
comment:3 by , 3 years ago
comment:4 by , 3 years ago
Has patch: | set |
---|
comment:5 by , 3 years ago
Cc: | added |
---|---|
Needs documentation: | set |
Needs tests: | set |
Owner: | changed from | to
Severity: | Normal → Release blocker |
Status: | new → assigned |
Summary: | 'subtitle' missing from admin context on index page → Variable lookup errors are logged rendering the admin index page if subtitle is not defined. |
Thanks for the report.
Regression in 84609b3205905097d7d3038d32e6101f012c0619.
comment:6 by , 3 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:7 by , 3 years ago
Needs documentation: | unset |
---|---|
Needs tests: | unset |
comment:8 by , 3 years ago
Triage Stage: | Accepted → Ready for checkin |
---|
follow-up: 12 comment:11 by , 3 years ago
I'm still facing this same issue even after updating to the Django 3.2.9.
Replying to Zain Patel:
This looks like a bug introduced in Django 3.2 with the introduction of a new variable introduced in the base templates (
django/contrib/admin/templates/base_site.html
) namedsubtitle.
This variable is passed in most places within the admin site, e.g in django/contrib/admin/options.py
Loading the admin index page with log-level debug shows the following exception/stack trace (that admittedly does not affect anything functional - simply clutters the logs):
Exception while resolving variable 'subtitle' in template 'admin/index.html'. Traceback (most recent call last): File "...lib/python3.7/site-packages/django/template/base.py", line 829, in _resolve_lookup current = current[bit] File "...lib/python3.7/site-packages/django/template/context.py", line 83, in __getitem__ raise KeyError(key) KeyError: 'subtitle' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "...lib/python3.7/site-packages/django/template/base.py", line 835, in _resolve_lookup if isinstance(current, BaseContext) and getattr(type(current), bit): AttributeError: type object 'RequestContext' has no attribute 'subtitle' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "...lib/python3.7/site-packages/django/template/base.py", line 843, in _resolve_lookup current = current[int(bit)] ValueError: invalid literal for int() with base 10: 'subtitle' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "...lib/python3.7/site-packages/django/template/base.py", line 850, in _resolve_lookup (bit, current)) # missing attribute django.template.base.VariableDoesNotExist: Failed lookup for key [subtitle] inI believe this can be fixed by providing
subtitle: None
in the AdminSite.each_context` method to default it to that. I am happy to create a PR for this.
On second though - instead of hardcoding
subtitle
to None - potentially it should be a customisable option in the AdminSite itself, so:
class MySite(AdminSite): site_header = "blah" subtitle = "my subtitle"?
comment:12 by , 3 years ago
Replying to Sourav Kumar:
I'm still facing this same issue even after updating to the Django 3.2.9.
Thanks for the report. I prepared PR with follow up. Does it work for you?
comment:13 by , 3 years ago
Cc: | removed |
---|
Potential fix as described in my ticket here: https://github.com/django/django/pull/14308