#21154 closed Bug (fixed)
`TemplateResponse` does not convert `Context` to `RequestContext`.
Reported by: | Tai Lee | Owned by: | nobody |
---|---|---|---|
Component: | Template system | Version: | dev |
Severity: | Normal | Keywords: | TemplateResponse Context RequestContext |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
The docs say that TemplateResponse
is a subclass of SimpleTemplateResponse
that uses RequestContext
instead of Context
. It also says that context data can be provided as a dict or as a Context
object. However, if a Context
object is given as context data, it is left as-is and is not converted to a RequestContext
object in TemplateResponse.resolve_context()
.
Either the docs should be changed to reflect that users must pass a dict or RequestContext
(and validate this in code), or the code should be updated to convert Context
to RequestContext
objects. I would suggest the latter, even though it may be an edge case.
If a user wants to use TemplateResponse
and they are passed a Context
object from somewhere (maybe 3rd party code), there appears to be no user-friendly way to convert it to RequestContext
themselves before passing to TemplateResponse
. You can't do RequestContext(request, context_object)
. It seems you would need to iterate through context_object.dicts
and assign each key/value to a new empty RequestContext
object in order, or perhaps just context.dicts
across.
Perhaps updating RequestContext
to allow Context
objects as data, and checking isinstance(context, RequestContext)
in TemplateResponse.resolve_context()
would be a good idea?
Change History (5)
comment:1 by , 11 years ago
comment:3 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Personally, I think it would be better to document this.
If you pass a dict, it will be "upgraded" to a RequestContext.
If you took the trouble to build a Context, it's assumed you did so for a reason.