#9038: url tag not working with reverse in 1.0 as it previously did
---------------------------------+------------------------------------------
 Reporter:  [EMAIL PROTECTED]  |       Owner:  nobody    
   Status:  new                  |   Milestone:            
Component:  Core framework       |     Version:  1.0       
 Keywords:  url, reverse         |       Stage:  Unreviewed
Has_patch:  0                    |  
---------------------------------+------------------------------------------
 I was getting a TemplateSyntaxError caused by a NoReverseMatch error with
 DJango 1.0 for code which previously worked.

 {{{
 Exception Type:         TemplateSyntaxError
 Exception Value:

 Caught an exception while rendering: Reverse for 'x.x_edit' with arguments
 '(7,)' and keyword arguments '{}' not found.
 Original Traceback (most recent call last):
   File "/usr/local/lib/python2.5/site-packages/django/template/debug.py",
 line 71, in render_node
     result = node.render(context)
   File "/usr/local/lib/python2.5/site-
 packages/django/template/defaulttags.py", line 378, in render
     args=args, kwargs=kwargs)
   File "/usr/local/lib/python2.5/site-
 packages/django/core/urlresolvers.py", line 252, in reverse
     *args, **kwargs)))
   File "/usr/local/lib/python2.5/site-
 packages/django/core/urlresolvers.py", line 241, in reverse
     "arguments '%s' not found." % (lookup_view, args, kwargs))
 NoReverseMatch: Reverse for 'x.x_edit' with arguments '(7,)' and keyword
 arguments '{}' not found.

 Exception Location:     /usr/local/lib/python2.5/site-
 packages/django/template/debug.py in render_node, line 81

 }}}

 I eventually tracked it down to this:

 I was using a url template tag to match the name 'edit' (see below). The
 pattern was the same as a preceding pattern which matched the same prefix
 with an optional number after it. This first url pattern had no name (I'd
 originally found I needed the 2 patterns because the first pattern had 2
 slashes at the end and didn't match the one slash I wanted).

 {{{
     url(r'^x/edit/(?P<x_id>[0-9]*)/$', x_edit,),
     url(r'^x/edit/$',                  x_edit, name='x_edit'),
 }}}

 The snippet of template code was:

 {{{
 <form action="{% url x_edit x.id %}/" method="post" name="my_form">
 }}}

 This used to work (presumably by failing the named match and somehow
 matching the un-named one?).

 However, in 1.0 it stopped working (I guess because the url resolver has
 been re-worked).

 I found (after much debugging), that I could fix the problem by adding
 another name for the 1st pattern, eg

 {{{
     url(r'^x/edit/(?P<x_id>[0-9]*)/$', x_edit, name='x_edit_id'),
     url(r'^x/edit/$',                  x_edit, name='x_edit'),
 }}}

 and changing my template to use it:
 {{{
  <form action="{% url x_edit_id x.id %}/" method="post" name="my_form">
 }}}

 This took quite a while for me to find, and I'd like peole to not have to
 do the same as I have in migrating from older code to 1.0!

 Can you maybe confirm the above and document this somewhere sensible for
 people who are migrating from 0.96+ to 1.0 (I think this was probably a
 backwards-incompatible change)?

 Thanks!
 Mary.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/9038>
Django <http://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to