Opened 2 years ago

Closed 2 years ago

#20645 closed Uncategorized (invalid)

reverse URL broken when you use includes

Reported by: ryan.ploetz@… Owned by: nobody
Component: Template system Version: 1.5
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 (last modified by ramiro)

if you use an include in your base URLConf and then use a name='' in that subsequent URLConf, the name doesn't resolve when you do a reverse match in the url tag in a template.



urlpatterns = patterns('',

    url(r'^bar/', include('bar.urls')),



urlpatterns = patterns('bar.views',

    url(r'^makeFoo/$', foo, name="generateFoo"),


in a HTML Template

{% url "generateFoo" %}

This generates a NoReverseMatch

If you put that named url in the root url patterns, the Reverse will find it and render it normally.

Change History (3)

comment:1 Changed 2 years ago by ramiro

  • Description modified (diff)
  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

Made description readable.

comment:2 Changed 2 years ago by ryan.ploetz@…

I've kept digging into this and it seems to be the '$' after the trailing slash if you do an include(). If that is there, the reverse won't be found. So in the above example, I forgot to add bar/$ which causes it to break. If the "$" is not there, the reverse will be found like normal.

Is this how it is supposed to work? It seems that this regular expression shouldn't be taken into consideration when using a reverse url matching via the 'name' or view name. Any comment by a senior Django dev about this would be useful.

comment:3 Changed 2 years ago by ramiro

  • Resolution set to invalid
  • Status changed from new to closed

Please read the documentation first ( and ask support questions via the right channels (

The reported case works (as in reverses the URL and doesn't raise NoReverseMatch) with both "generateFoo" entry having and not having the trailing $ although the latter makes no sense (the details are in the documentation):

In [1]: from django.core.urlresolvers import reverse

In [2]: reverse('generateFoo')
Out[2]: '/bar/makeFoo/'

In [3]: from django.template import Context, Template

In [4]: t = Template("{% url 'generateFoo' %}")

In [5]: t.render(Context())
Out[5]: u'/bar/makeFoo/'
Note: See TracTickets for help on using tickets.
Back to Top