--
Ticket URL: <https://code.djangoproject.com/ticket/19878>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_docs: => 0
* stage: Unreviewed => Design decision needed
* type: Bug => New feature
* needs_tests: => 0
* needs_better_patch: => 0
Comment:
Setting this DDN pending comment from someone who uses class-based views.
Seems like a new feature rather than a bug, in any case.
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:1>
* status: new => closed
* keywords: => django-sprint
* has_patch: 0 => 1
* resolution: => fixed
Comment:
https://github.com/django/django/pull/753
The CBV:
* BaseDetailView
* ProcessFormView
* BaseListView
Did not push the kwargs into the context
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:2>
* status: closed => new
* resolution: fixed =>
Comment:
The ticket is not fixed until patch in merged into the django. Please
don't set status to closed until it's not closed.
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:3>
Comment (by aaugustin):
This can be backwards incompatible in keys in `kwargs` clash with keys in
the output of `get_context_data()`.
The current behavior might be for backwards compatibility with the now-
removed function-based generic views. Maybe this was discussed on django-
developers?
This would need docs (release notes + check if the CBV docs need to be
updated), and tests.
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:4>
* needs_docs: 0 => 1
* needs_tests: 0 => 1
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:5>
* cc: marc.tamlyn@… (added)
Comment:
I am strongly the other way on this issue - I think the feature is wrong
in `TemplateView` and should be deprecated.
For example, it means that it's hard to have `context_object_name` and
`slug_url_kwarg` the same - whether you get the object or the slug would
be rather arbitrary.
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:6>
* status: new => closed
* resolution: => wontfix
Comment:
Agreed with mjtamlyn, so marking this wontfix.
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:7>
Comment (by mjtamlyn):
Jacob - what's your opinion on taking the deprecation the other way - this
one-off behaviour of `TemplateView` has bitten me before. Personally I'd
like the views to be consistently *without* this feature.
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:8>
* status: closed => new
* resolution: wontfix =>
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:9>
* needs_docs: 1 => 0
* has_patch: 1 => 0
* needs_tests: 1 => 0
* stage: Design decision needed => Accepted
Comment:
IIRC TemplateView works like this for backwards-compatibility with the
(now defunct) function-based generic views.
It would make sense to normalize it now, assuming we can figure out a
deprecation path.
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:10>
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:11>
* cc: mszamot@… (added)
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:12>
Comment (by mjtamlyn):
Hmm, I know I'd done something at some point using these views which had
bitten me, but I can't remember what it was. This is near impossible to
deprecate nicely and probably shouldn't be that big a deal.
That said, it didn't exist before 1.5 in its current form - the way these
arguments are used was (backwardsly incompatibly) changed then anyway.
Personally I'd like to just remove it as it "feels wrong", but whether
that is a good idea is another question.
'''History lesson'''
Django 1.2 had `direct_to_template` which would pass through URL kwargs as
an object called `params` into the context
Django 1.3 & 1.4 continued this pattern in the new `TemplateView`
Django 1.5 changed `TemplateView` to place the arguments directly into the
context (and deprecated `direct_to_template`)
My personal feeling is that using URLconf kwargs directly in a view is a
bad pattern, but it is a historical Django pattern. This, and the ability
to customise CBVs using the `as_view()` call, are the remaining parts of
it.
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:13>
Comment (by loic84):
I ran into the same problem as @mjtamlyn with `TemplateView`; and I also
think that having the URL `kwargs` directly in the `context_data` is an
anti pattern.
The anti pattern added to the discrepancy between the different views is
IMO a problem big enough to warrant a documented backward incompatible
change.
I tried to think of a transparent deprecation cycle, but what I found was
at best fragile and hackish.
One option would be to ask people to set a `kwargs_to_context = False`
argument on their `TemplatView` to get the "new" behavior and therefore
opt out from the `DeprecationWarning`.
Thoughts?
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:14>
Comment (by timo):
I'm not much of a user of CBVs but that deprecation plan sounds like it
would work.
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:15>
Comment (by cjerdonek):
Note that there is a distinction between //passing// `**kwargs` to
`get_context_data()` and having `get_context_data()` //return//
`**kwargs`.
Personally, I would favor `TemplateView` continuing to pass `**kwargs` to
`get_context_data()` even if its return value is changed by default not to
include `kwargs`. This would keep overriding `get_context_data()` simple
because you can simply access `**kwargs` in the method without having to
decide between `**kwargs` and `self.kwargs`.
For consistency, I would like it if all generic views passed the full
view's keyword arguments to `get_context_data()`. Some classes like
`ProcessFormView` restrict what is passed to `get_context_data()`, which
was surprising to me because then `**kwargs` for the method differs from
`self.kwargs`. I just opened #21964 which is about this issue.
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:16>
* cc: chris.jerdonek@… (added)
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:17>
* owner: nobody => Adam (Chainz) Johnson
* needs_better_patch: 0 => 1
* has_patch: 0 => 1
* status: new => assigned
* needs_docs: 0 => 1
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:18>
* cc: Adam (Chainz) Johnson (added)
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:19>
* needs_better_patch: 1 => 0
* needs_docs: 1 => 0
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:20>
* type: New feature => Cleanup/optimization
* stage: Accepted => Ready for checkin
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:21>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"4ed534758cb6a11df9f49baddecca5a6cdda9311" 4ed53475]:
{{{
#!CommitTicketReference repository=""
revision="4ed534758cb6a11df9f49baddecca5a6cdda9311"
Fixed #19878 -- Deprecated TemplateView passing URL kwargs into context.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:22>
Comment (by Mariusz Felisiak <felisiak.mariusz@…>):
In [changeset:"bb8f66934d93faf80cd1a2dda65aaedce21a6fc5" bb8f6693]:
{{{
#!CommitTicketReference repository=""
revision="bb8f66934d93faf80cd1a2dda65aaedce21a6fc5"
Fixed #31877 -- Reverted "Fixed #19878 -- Deprecated TemplateView passing
URL kwargs into context."
This reverts commit 4ed534758cb6a11df9f49baddecca5a6cdda9311.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:23>
Comment (by Mariusz Felisiak <felisiak.mariusz@…>):
In [changeset:"e81aa7a94addf1f5380960fe89a49d104889c96d" e81aa7a]:
{{{
#!CommitTicketReference repository=""
revision="e81aa7a94addf1f5380960fe89a49d104889c96d"
[3.1.x] Fixed #31877 -- Reverted "Fixed #19878 -- Deprecated TemplateView
passing URL kwargs into context."
This reverts commit 4ed534758cb6a11df9f49baddecca5a6cdda9311.
Backport of bb8f66934d93faf80cd1a2dda65aaedce21a6fc5 from master
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:24>
* has_patch: 1 => 0
* resolution: fixed => wontfix
* stage: Ready for checkin => Unreviewed
Comment:
Marked as `wontfix` because we don't have a clear deprecation path (see
#31877).
--
Ticket URL: <https://code.djangoproject.com/ticket/19878#comment:25>