Opened 12 years ago
Closed 12 years ago
#20547 closed Bug (duplicate)
Reverse url resolve fails when ~ (tilda) is in url prefix
Reported by: | Owned by: | nobody | |
---|---|---|---|
Component: | Core (URLs) | Version: | 1.5 |
Severity: | Normal | Keywords: | |
Cc: | bmispelon@… | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
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 : <form id="changelist-form" action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>{% csrf_token %} 85 : {% if cl.formset %} 86 : <div>{{ cl.formset.management_form }}</div> 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 : </form> 96 : </div> 97 : </div> 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<id>\d+)/$', 'test', {}, name='test'), )
Change History (4)
comment:1 by , 12 years ago
comment:2 by , 12 years ago
Cc: | added |
---|
comment:3 by , 12 years ago
Yes, it is indeed fixed with the latest version from repository, sorry about that.
It is not in 1.5.1, however. Will it be included in the next 1.5. bug fix release?
comment:4 by , 12 years ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
The patch was merged into master
at the time (which became 1.6), and it wasn't backported to the stable/1.5.x
branch.
Hi,
Thanks for the detailed report.
Can you check if the issue is fixed with the latest version?
It looks like a duplicate of #20022.