mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.6.x] Fixed #22486 -- Restored the ability to reverse views created using functools.partial.
Regression in8b93b31487. Thanks rcoup for the report. Backport of3c06b2f2a3from master
This commit is contained in:
		| @@ -8,6 +8,8 @@ a string) and returns a tuple in this format: | ||||
| """ | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| import functools | ||||
| from importlib import import_module | ||||
| import re | ||||
| from threading import local | ||||
|  | ||||
| @@ -268,6 +270,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>`_) | ||||
							
								
								
									
										14
									
								
								docs/releases/1.5.7.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								docs/releases/1.5.7.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| ========================== | ||||
| Django 1.5.7 release notes | ||||
| ========================== | ||||
|  | ||||
| *Under development* | ||||
|  | ||||
| Django 1.5.7 fixes a regression in the 1.5.6 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>`_) | ||||
| @@ -12,3 +12,7 @@ Bugfixes | ||||
| * Added backwards compatibility support for the :mod:`django.contrib.messages` | ||||
|   cookie format of Django 1.4 and earlier to facilitate upgrading to 1.6 from | ||||
|   1.4 (`#22426 <http://code.djangoproject.com/ticket/22426>`_). | ||||
|  | ||||
| * Restored the ability to :meth:`~django.core.urlresolvers.reverse` views | ||||
|   created using :func:`functools.partial()` | ||||
|   (`#22486 <http://code.djangoproject.com/ticket/22486>`_) | ||||
|   | ||||
| @@ -33,6 +33,7 @@ Final releases | ||||
| .. toctree:: | ||||
|    :maxdepth: 1 | ||||
|  | ||||
|    1.5.7 | ||||
|    1.5.6 | ||||
|    1.5.5 | ||||
|    1.5.4 | ||||
| @@ -46,6 +47,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 | ||||
| @@ -45,3 +47,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, | ||||
| ) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user