--
Ticket URL: <https://code.djangoproject.com/ticket/17795>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0
Comment:
Same issue in
dates.BaseDateListView.get
list.BaseListView.get
detail.BaseDetailView.get
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:1>
--
Comment (by jezdez):
Updated ticket description.
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:2>
--
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:3>
* stage: Unreviewed => Accepted
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:4>
* owner: nobody => Fandekasp
* cc: lemaire.adrien@… (added)
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:5>
* has_patch: 0 => 1
* needs_tests: 0 => 1
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:6>
* needs_better_patch: 0 => 1
* needs_tests: 1 => 0
Comment:
@ed.crewe , I couldn't reproduce your problem, I don't understand how
you're testing your user object permissions. I always do it through
get_object or dispatch, and didn't get such problem.
I wrote a test that does basically the same thing, by adding a kwarg in an
overrided get() instead of get_context_data, and insure that this new
kwarg isn't lost in ProcessFormView.get(). I don't like my test, so if you
could give me your use case, I'll replace the test by a proper one.
I'm wondering if I should do the same with post ? Again, I need to
understand the use case before doing so.
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:7>
Comment (by anonymous):
Hi,
I have attached a file with the monkey patches I am using of class views -
and an example decorator that demonstrates the issue.
So why it is desirable for get_context_data to include the views object(s)
in the kwargs it is passed - rather than just getting them from the view
attributes, ie. self.object - so that standard decorators for the context
data method can be used which need access to a views object(s) or possibly
other attributes.
In this case an object permissions test decorator.
Thanks,
Ed
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:8>
* needs_better_patch: 1 => 0
Comment:
I think we're good now. I wrote responsible tests thanks to @acdha idea of
using RequestFactory for that case.
I realize that there is no test for BaseDateListView, so I omitted that
one, let me know if I should write tests for the archive views.
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:9>
* needs_better_patch: 0 => 1
Comment:
The patch looks good. If you could add tests for `BaseDateListView` that
would be great. Also some minor comments:
* Verify the actual value of the 'foo' context variables instead of just
verifying their existence.
* Instead of updating `kwargs` (e.g.: `kwargs['form'] = form`) before
passing it to `self.get_context_data()`, use named arguments, i.e.:
`self.get_context_data(form=form, **kwargs)`, mainly for consistency with
the rest of the codebase.
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:10>
* needs_better_patch: 1 => 0
Comment:
Done. I just needed to write a test for one of {{{DateBaseListView}}}
subclasses, I wrote one for ArchiveIndexViewTests.
actual value of 'foo' is verified.
BaseDetailView.get() now consistent with the rest of the code.
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:11>
* stage: Accepted => Ready for checkin
Comment:
Great, thanks!
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:12>
* cc: bmispelon@… (added)
Comment:
For reference, commit f04bb6d798b07aa5e7c1d99d700fa6ddc7d39e62 added this
behavior to `TemplateView`.
I'm wondering if it'd be a good idea to just add this behavior in
`ContextMixin` instead of re-implementing it in each view.
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:13>
* needs_better_patch: 0 => 1
* stage: Ready for checkin => Accepted
Comment:
I'm not sure if this requires any changes per the last comment, but the
patch no longer applies cleanly.
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:14>
* cc: polmuz (added)
* needs_better_patch: 1 => 0
* version: 1.4-beta-1 => master
* stage: Accepted => Ready for checkin
Comment:
Hi, I created a PR that merges cleanly using the patch provided. I think
it's ready for checking again given that adding the behavior in
ContextMixin doesn't seem to be straightforward.
https://github.com/django/django/pull/1631
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:15>
* needs_docs: 0 => 1
* stage: Ready for checkin => Accepted
Comment:
This behavior change needs a mention in the release notes and probably the
docs themselves.
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:16>
Comment (by mjtamlyn):
I want to -1 this change. URL keyword arguments are not context data. IMO
the behaviour of TemplateView is wrong here, and has bitten me before
where I've had to change my urlconf.
For a concrete exple of why this is bad, consider the situation where I
have a URL pointing to a form view which renders different forms depending
on the url. Then I call that URL kwarg 'form' and this code breaks.
The correct place to add things to the context is in get context data, not
by arbitrarily adding all URL kwargs to the context in all views.
This patch would break existing running code for me.
As an aside, note that view is put into the context now, so if you really
want to you can access the URL kwargs as view.kwargs
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:17>
Comment (by mjtamlyn):
This is related to #19878
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:18>
Comment (by loic84):
@mjtamlyn: +1, it bit me too. It's a problem with TemplateView which if I
remember well, did that for backward compat with the old
`direct_to_template`.
It'd be great to deprecate that...
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:19>
Comment (by mjtamlyn):
That's what #19878 is about. the details of the deprecation are tricky.
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:20>
* status: new => closed
* resolution: => wontfix
Comment:
Marking as won't fix given the backwards compatibility concerns.
--
Ticket URL: <https://code.djangoproject.com/ticket/17795#comment:21>