#22589 closed Uncategorized (duplicate)

url reverse should encode forward slashes

Reported by: denilsonsa Owned by: nobody
Component: Uncategorized Version: 1.6
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

I have essentially the same issue as this guy: http://stackoverflow.com/questions/4241484/use-djangos-url-template-tag-with-special-characters

# In urls.py:
url(r'^something/(?P<title>[^/]*)/something/else$', views.something, name='something'),

# In a template:
<a href="{% url something page.title %}">Some link</a>

Here, page.title is a completely free-form string that might contain any characters, including forward slashes. I want to encode it completely. The current url reverse() code will quote any parameters using Django's urlquote, which will call Python's quote, which will encode all special characters, except the slash (and _.-).

https://github.com/django/django/blob/91afc00513bd2fa6302ea2be35e1f842cbd5fd38/django/core/urlresolvers.py#L459

There is no hook or option to make url reverse encode the slash while building the URL. We can't pre-encode the slash either, as it will lead to double-encoding the slashes (requiring an extra decoding step inside the view). So, there is no straightforward way to build a URL while encoding the slashes from args.

My suggestion is to change the behavior of url reverse to also encode forward slashes. Or, at least, give some flexibility when encoding the URL.

Change History (1)

comment:1 Changed 16 months ago by timo

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to duplicate
  • Status changed from new to closed

This is complicated, but I believe it's covered in #22223.

Note: See TracTickets for help on using tickets.
Back to Top