Opened 13 years ago
Closed 13 years ago
#16003 closed Bug (fixed)
Admin incompatible with USE_ETAGS = True
Reported by: | Chris Lamb | Owned by: | nobody |
---|---|---|---|
Component: | contrib.admin | Version: | dev |
Severity: | Release blocker | Keywords: | regression |
Cc: | pterk@…, real.human@… | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
In SVN, the admin does not work with USE_ETAGS = True:
Environment:
Traceback: File "/srv/www.example.com/example/packages/django/core/handlers/base.py" in get_response 111. response = callback(request, *callback_args, **callback_kwargs) File "/srv/www.example.com/example/packages/django/contrib/admin/sites.py" in wrapper 213. return self.admin_view(view, cacheable)(*args, **kwargs) File "/srv/www.example.com/example/packages/django/utils/decorators.py" in _wrapped_view 91. response = view_func(request, *args, **kwargs) File "/srv/www.example.com/example/packages/django/views/decorators/cache.py" in _wrapped_view_func 77. response = view_func(request, *args, **kwargs) File "/srv/www.example.com/example/packages/django/contrib/admin/sites.py" in inner 196. return view(request, *args, **kwargs) File "/srv/www.example.com/example/packages/django/views/decorators/cache.py" in _wrapped_view_func 78. add_never_cache_headers(response) File "/srv/www.example.com/example/packages/django/utils/cache.py" in add_never_cache_headers 116. patch_response_headers(response, cache_timeout=-1) File "/srv/www.example.com/example/packages/django/utils/cache.py" in patch_response_headers 105. response['ETag'] = '"%s"' % hashlib.md5(response.content).hexdigest() File "/srv/www.example.com/example/packages/django/template/response.py" in _get_content 110. raise ContentNotRenderedError('The response content must be rendered before it can be accessed.') Exception Type: ContentNotRenderedError at /a/admin/ Exception Value: The response content must be rendered before it can be accessed.
Attachments (2)
Change History (11)
comment:1 by , 13 years ago
Description: | modified (diff) |
---|---|
Keywords: | regression added |
Severity: | Normal → Release blocker |
Triage Stage: | Unreviewed → Accepted |
comment:2 by , 13 years ago
Component: | Uncategorized → contrib.admin |
---|
Yeah, this seems like a rather major issue with the TemplateResponse feature, which I think can only be fixed by actually rendering the content if needed instead of raising a ContentNotRenderedError
exception.
With proper documentation of which middlewares/decorator modify the content we should be able to keep the usefulness of TemplateResponse up.
comment:3 by , 13 years ago
Needs tests: | set |
---|---|
Patch needs improvement: | set |
UI/UX: | unset |
I've got a preliminary fix for this. I'll be at the djangocon sprint in A'dam tomorrow from ~10.00 on to continue work on this.
by , 13 years ago
Attachment: | 16003.patch added |
---|
A preliminary patch that fixes the issue in the admin. Needs more work for an alround solution. Also regression tests
comment:4 by , 13 years ago
Cc: | added |
---|
comment:5 by , 13 years ago
Cc: | removed |
---|---|
Has patch: | set |
Needs tests: | unset |
Patch needs improvement: | unset |
I think I fixed this for all places patch_response_header is called. I've added a test that fails when USE_ETAGS is set to True and an admin site is called. I've added a few more tests to check various headers with TemplateResponse but I think only the etag is relevant because it requires the content is complete when the etag value is calculated.
The solution, IMO, is using the add_post_render_callback if/when the response is a TemplateResponse (using ducktype checking now rather than using isinstance).
comment:6 by , 13 years ago
Cc: | added |
---|
comment:8 by , 13 years ago
Cc: | added |
---|
Fixed formatting, please use preview. I suspect this is due to r16087. It does not happen with 1.3 release. There's also a likely-related thread on django-developers: http://groups.google.com/group/django-developers/browse_thread/thread/f96e982254fbe5c3