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/f04bb6d798b07aa5e7c1d99d700fa6ddc7d39e62

On 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
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-developers/-/M48ifovMmXwJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to