diff --git a/django/urls/base.py b/django/urls/base.py index 5185324..f141b9c 100644 --- a/django/urls/base.py +++ b/django/urls/base.py @@ -175,6 +175,7 @@ def translate_url(url, lang_code): to_be_reversed = "%s:%s" % (match.namespace, match.url_name) if match.namespace else match.url_name with override(lang_code): try: + match.kwargs = dict((k, v) for k, v in match.kwargs.iteritems() if not v is None) url = reverse(to_be_reversed, args=match.args, kwargs=match.kwargs) except NoReverseMatch: pass diff --git a/tests/i18n/patterns/tests.py b/tests/i18n/patterns/tests.py index c503a74..4e90c89 100644 --- a/tests/i18n/patterns/tests.py +++ b/tests/i18n/patterns/tests.py @@ -155,6 +155,9 @@ class URLTranslationTests(URLTestCaseBase): with translation.override('en'): self.assertEqual(translate_url('/en/non-existent/', 'nl'), '/en/non-existent/') self.assertEqual(translate_url('/en/users/', 'nl'), '/nl/gebruikers/') + # URL with arguments + self.assertEqual(translate_url('/en/with-arguments/regular-argument/', 'nl'), '/nl/with-arguments/regular-argument/') + self.assertEqual(translate_url('/en/with-arguments/regular-argument/optional-argument.html', 'nl'), '/nl/with-arguments/regular-argument/optional-argument.html') # Namespaced URL self.assertEqual(translate_url('/en/account/register/', 'nl'), '/nl/profiel/registeren/') self.assertEqual(translation.get_language(), 'en') diff --git a/tests/i18n/patterns/urls/default.py b/tests/i18n/patterns/urls/default.py index caf1a76..d35a610 100644 --- a/tests/i18n/patterns/urls/default.py +++ b/tests/i18n/patterns/urls/default.py @@ -15,6 +15,7 @@ urlpatterns = [ urlpatterns += i18n_patterns( url(r'^prefixed/$', view, name='prefixed'), url(r'^prefixed\.xml$', view, name='prefixed_xml'), + url(r'^with-arguments/(?P[\w-]+)/(?:(?P[\w-]+).html)?$', view, name='with-arguments'), url(_(r'^users/$'), view, name='users'), url(_(r'^account/'), include('i18n.patterns.urls.namespace', namespace='account')), )