#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 , 5 years ago
| Description: | modified (diff) |
|---|
comment:2 by , 5 years ago
| Description: | modified (diff) |
|---|
comment:3 by , 5 years ago
comment:4 by , 5 years ago
| Has patch: | set |
|---|
comment:5 by , 5 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 , 5 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:7 by , 5 years ago
| Needs documentation: | unset |
|---|---|
| Needs tests: | unset |
comment:8 by , 5 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
follow-up: 12 comment:11 by , 4 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: Nonein 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
subtitleto 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 , 4 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 , 4 years ago
| Cc: | removed |
|---|
Potential fix as described in my ticket here: https://github.com/django/django/pull/14308