mirror of
https://github.com/django/django.git
synced 2025-03-14 03:10:45 +00:00
[1.4.x] Fixed #22486 -- Restored the ability to reverse views created using functools.partial.
Regression in 8b93b31. Thanks rcoup for the report. Backport of 3c06b2f2a3 from master
This commit is contained in:
parent
1edb163592
commit
b91c385e32
@ -7,6 +7,7 @@ a string) and returns a tuple in this format:
|
||||
(view_function, function_args, function_kwargs)
|
||||
"""
|
||||
|
||||
import functools
|
||||
import re
|
||||
from threading import local
|
||||
|
||||
@ -248,6 +249,9 @@ class RegexURLResolver(LocaleRegexProvider):
|
||||
self._callback_strs.add(pattern._callback_str)
|
||||
elif hasattr(pattern, '_callback'):
|
||||
callback = pattern._callback
|
||||
if isinstance(callback, functools.partial):
|
||||
callback = callback.func
|
||||
|
||||
if not hasattr(callback, '__name__'):
|
||||
lookup_str = callback.__module__ + "." + callback.__class__.__name__
|
||||
else:
|
||||
|
14
docs/releases/1.4.12.txt
Normal file
14
docs/releases/1.4.12.txt
Normal file
@ -0,0 +1,14 @@
|
||||
===========================
|
||||
Django 1.4.12 release notes
|
||||
===========================
|
||||
|
||||
*Under development*
|
||||
|
||||
Django 1.4.12 fixes a regression in the 1.4.11 security release.
|
||||
|
||||
Bugfixes
|
||||
========
|
||||
|
||||
* Restored the ability to :meth:`~django.core.urlresolvers.reverse` views
|
||||
created using :func:`functools.partial()`
|
||||
(`#22486 <http://code.djangoproject.com/ticket/22486>`_)
|
@ -19,6 +19,7 @@ Final releases
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
1.4.12
|
||||
1.4.11
|
||||
1.4.10
|
||||
1.4.9
|
||||
|
@ -2,7 +2,7 @@ from __future__ import absolute_import
|
||||
|
||||
from django.conf.urls import patterns, url, include
|
||||
|
||||
from .views import empty_view, absolute_kwargs_view
|
||||
from .views import empty_view, empty_view_partial, empty_view_wrapped, absolute_kwargs_view
|
||||
|
||||
|
||||
other_patterns = patterns('',
|
||||
@ -56,6 +56,10 @@ urlpatterns = patterns('',
|
||||
# This is non-reversible, but we shouldn't blow up when parsing it.
|
||||
url(r'^(?:foo|bar)(\w+)/$', empty_view, name="disjunction"),
|
||||
|
||||
# Partials should be fine.
|
||||
url(r'^partial/', empty_view_partial, name="partial"),
|
||||
url(r'^partial_wrapped/', empty_view_wrapped, name="partial_wrapped"),
|
||||
|
||||
# Regression views for #9038. See tests for more details
|
||||
url(r'arg_view/$', 'kwargs_view'),
|
||||
url(r'arg_view/(?P<arg1>\d+)/$', 'kwargs_view'),
|
||||
|
@ -1,3 +1,5 @@
|
||||
from functools import partial, update_wrapper
|
||||
|
||||
from django.http import HttpResponse
|
||||
from django.views.generic import RedirectView
|
||||
from django.core.urlresolvers import reverse_lazy
|
||||
@ -40,3 +42,11 @@ def login_required_view(request):
|
||||
|
||||
def bad_view(request, *args, **kwargs):
|
||||
raise ValueError("I don't think I'm getting good value for this view")
|
||||
|
||||
|
||||
empty_view_partial = partial(empty_view, template_name="template.html")
|
||||
|
||||
|
||||
empty_view_wrapped = update_wrapper(
|
||||
partial(empty_view, template_name="template.html"), empty_view,
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user