`TemplateResponse` does not convert `Context` to `RequestContext`.
|Reported by:||mrmachine||Owned by:||nobody|
|Severity:||Normal||Keywords:||TemplateResponse Context RequestContext|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
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 Changed 2 years ago by FunkyBob
- Needs documentation unset
- Needs tests unset
- Patch needs improvement unset
comment:3 Changed 2 years ago by Tim Graham <timograham@…>
- Resolution set to fixed
- Status changed from new to closed