id,summary,reporter,owner,description,type,status,component,version,severity,resolution,keywords,cc,stage,has_patch,needs_docs,needs_tests,needs_better_patch,easy,ui_ux 20547,Reverse url resolve fails when ~ (tilda) is in url prefix,hordur@…,nobody,"Hello, I'm trying to deploy django in my public_html directory which is served via http://servername/~username/ by mod_wsgi in apache. However, I'm running into some errors when I have parameters to my views, such as in the admin interface: -------- {{{ Environment: Request Method: GET Request URL: https://192.168.0.2/~hordur/django/admin/sites/site/ Django Version: 1.5.1 Python Version: 2.7.3 Installed Applications: ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', 'django.contrib.admindocs', 'django.contrib.flatpages', 'south', 'django_extensions', 'debug_toolbar', 'micawber.contrib.mcdjango', 'hordur') Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware') Template error: In template /home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/contrib/admin/templates/admin/change_list.html, error at line 91 a float is required 81 : {% endif %} 82 : {% endblock %} 83 : 84 :
{% csrf_token %} 85 : {% if cl.formset %} 86 :
{{ cl.formset.management_form }}
87 : {% endif %} 88 : 89 : {% block result_list %} 90 : {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %} 91 : {% result_list cl %} 92 : {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %} 93 : {% endblock %} 94 : {% block pagination %}{% pagination cl %}{% endblock %} 95 :
96 : 97 : 98 : {% endblock %} 99 : Traceback: File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/core/handlers/base.py"" in get_response 140. response = response.render() File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/response.py"" in render 105. self.content = self.rendered_content File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/response.py"" in rendered_content 82. content = template.render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/base.py"" in render 140. return self._render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/test/utils.py"" in instrumented_test_render 65. return self.nodelist.render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/base.py"" in render 830. bit = self.render_node(node, context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/debug.py"" in render_node 74. return node.render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/loader_tags.py"" in render 124. return compiled_parent._render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/test/utils.py"" in instrumented_test_render 65. return self.nodelist.render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/base.py"" in render 830. bit = self.render_node(node, context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/debug.py"" in render_node 74. return node.render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/loader_tags.py"" in render 124. return compiled_parent._render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/test/utils.py"" in instrumented_test_render 65. return self.nodelist.render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/base.py"" in render 830. bit = self.render_node(node, context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/debug.py"" in render_node 74. return node.render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/loader_tags.py"" in render 63. result = block.nodelist.render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/base.py"" in render 830. bit = self.render_node(node, context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/debug.py"" in render_node 74. return node.render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/loader_tags.py"" in render 63. result = block.nodelist.render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/base.py"" in render 830. bit = self.render_node(node, context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/debug.py"" in render_node 74. return node.render(context) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/template/base.py"" in render 1185. _dict = func(*resolved_args, **resolved_kwargs) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/contrib/admin/templatetags/admin_list.py"" in result_list 286. 'results': list(results(cl))} File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/contrib/admin/templatetags/admin_list.py"" in results 264. yield ResultList(None, items_for_result(cl, res, None)) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/contrib/admin/templatetags/admin_list.py"" in __init__ 256. super(ResultList, self).__init__(*items) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/contrib/admin/templatetags/admin_list.py"" in items_for_result 219. url = cl.url_for_result(result) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/contrib/admin/views/main.py"" in url_for_result 384. current_app=self.model_admin.admin_site.name) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/core/urlresolvers.py"" in reverse 496. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) File ""/home/hordur/.virtualenvs/hordur_website/lib/python2.7/site-packages/django/core/urlresolvers.py"" in _reverse_with_prefix 391. candidate = (prefix_norm + result) % dict(zip(prefix_args + params, unicode_args)) Exception Type: TypeError at /admin/sites/site/ Exception Value: a float is required }}} ------- What seems to be the problem is that the ~ is replaced with %7E by urlquote: https://github.com/django/django/blob/90e530978d590a5bdcf75525aa03f844766018b8/django/core/urlresolvers.py#L384 This causes the string formatting to fail because %7E expects a float. Following is a test case reproduces the error. {{{ from django.core.urlresolvers import reverse class TildaTest(TestCase): urls = 'mysite.urls' def test(self): self.assertEqual(reverse('test', prefix='/~test/', args=(1,)), '/~test/test/1/') }}} and the mysite.urls file: {{{ from django.conf.urls import patterns, include, url urlpatterns = patterns('', url(r'^test/(?P\d+)/$', 'test', {}, name='test'), ) }}}",Bug,closed,Core (URLs),1.5,Normal,duplicate,,bmispelon@…,Unreviewed,0,0,0,0,0,0