Opened 10 years ago

Closed 10 years ago

Last modified 10 years ago

#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 FunkyBob, 10 years ago

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.

comment:2 by FunkyBob, 10 years ago

I've written some additional docs in the pr:

https://github.com/django/django/pull/1694

comment:3 by Tim Graham <timograham@…>, 10 years ago

Resolution: fixed
Status: newclosed

In c39c9f2ad8b2670d53ef845face67c29f3f4be3b:

Fixed #21154 -- Updated TemplateResponse docs to better explain context.

Thanks mrmachine for the report.

comment:4 by Tim Graham <timograham@…>, 10 years ago

In 98773c4bb53ff464c3782694f244e80158f975ee:

[1.6.x] Fixed #21154 -- Updated TemplateResponse docs to better explain context.

Thanks mrmachine for the report.

Backport of c39c9f2ad8 from master

comment:5 by Tim Graham <timograham@…>, 10 years ago

In 20f394f4d5a5e0b4647aac2dd7b5ab8dc89d36fa:

[1.5.x] Fixed #21154 -- Updated TemplateResponse docs to better explain context.

Thanks mrmachine for the report.

Backport of c39c9f2ad8 from master

Note: See TracTickets for help on using tickets.
Back to Top