Hi Bernado,
Template view passing params into the context rather than just passing the kwargs from the urlconf directly is actally somewhat older, and is kept as legacy from django.views.generic.simple.direct_to_template. The changes you refer to do actually introduce a subtle backwards incompatibility with TemplateView - but yesterday we made a new commit[1], fixing the *real* problem, which is that the params variable was inconsistent with how the rest of the CBVs worked. This actually introduces a slightly different backwards incompatibility, which is that the params variable no longer exists. This has been documented in the release notes.
There is perhaps a case for removing this passing of urlconf kwargs to the context all together, as it seems a little odd to me and only applies to TemplateView, but for the moment it's at least been made a bit more consistent with how other CBVs work.
Marc
[1]
https://github.com/django/django/commit/f04bb6d798b07aa5e7c1d99d700fa6ddc7d39e62On Saturday, 18 August 2012 08:21:28 UTC+1, Bernardo wrote:
Hi, I was trying my project on django 1.5 alpha and a change on TemplateViews made some code break.
The `get` method changed how `get_context_data` is called from (**kwargs) to (params=kwargs). Link: https://github.com/django/django/blob/master/django/views/generic/base.py
I traced the change and found a ticket saying the TemplateView could not be used with FormView because the get_context_data is in a different layout. Ticket: https://code.djangoproject.com/ticket/16074
I don't know how popular are classed based views among other django developers, but I only use them. So, this change could be added in the release notes to warn people about breaking some code.
For me, I had the habit of writing:
With e.g. this url: url(r'^ref/(?P<id>\d+?)/?$', views.ref.Show.as_view())
def get_context_data(self, id, **kw):
pass #do something with id
Now, the only way I find to keep the code compatible with both 1.4 and 1.5 is doing:
def get_context_data(self, **kw):
id = kw.get('params', kw)['id']
which is just a little bit more code but could crash in django 1.4 if somehow there's a "params" argument
Could this be avoided?
Thanks,
Bernardo