Opened 16 years ago
Closed 16 years ago
#9496 closed (worksforme)
reverse() function doesn't seem to take account of the includer urlconf
Reported by: | Seemant Kulleen | Owned by: | nobody |
---|---|---|---|
Component: | Uncategorized | Version: | 1.0 |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I have a urlconf being included from the top-level urlconf. the one being included is named, and I'm trying to get the reverse() function to work with the named one. It fails with the posted exception. I think this is wrong behaviour. Forgive my unorthodox use if this is the correct behaviour.
urls.py: (r'^blog/', include('kulleen.blog.urls.blogs')), (r'^(?P<member>[\w]+)/blog/', include('kulleen.blog.urls.blogs')), blog/urls/blogs.py: url( r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/(?P<slug>[-\w]+)/$', 'object_detail', dict( blog_dict, slug_field='slug', template_object_name = 'entry', ), name='entry_view', ), exception: In [1]: from blog.models import Entry In [2]: e = Entry.objects.all()[65] In [3]: e.get_absolute_url() --------------------------------------------------------------------------- NoReverseMatch Traceback (most recent call last) /home/seemant/Projects/websites/kulleen/<ipython console> in <module>() /usr/lib64/python2.5/site-packages/django/utils/functional.pyc in _curried(*moreargs, **morekwargs) 53 def curry(_curried_func, *args, **kwargs): 54 def _curried(*moreargs, **morekwargs): ---> 55 return _curried_func(*(args+moreargs), **dict(kwargs, **morekwargs)) 56 return _curried 57 /usr/lib64/python2.5/site-packages/django/db/models/base.pyc in get_absolute_url(opts, func, self, *args, **kwargs) 509 510 def get_absolute_url(opts, func, self, *args, **kwargs): --> 511 return settings.ABSOLUTE_URL_OVERRIDES.get('%s.%s' % (opts.app_label, opts.module_name), func)(self, *args, **kwargs) 512 513 /home/seemant/Projects/websites/kulleen/blog/models.pyc in get_absolute_url(self) 49 'month': self.pub_date.strftime('%b').lower(), 50 'day': self.pub_date.strftime('%d'), ---> 51 'slug': self.slug 52 } 53 ) /usr/lib64/python2.5/site-packages/django/core/urlresolvers.pyc in reverse(viewname, urlconf, args, kwargs, prefix) 250 prefix = get_script_prefix() 251 return iri_to_uri(u'%s%s' % (prefix, get_resolver(urlconf).reverse(viewname, --> 252 *args, **kwargs))) 253 254 def clear_url_caches(): /usr/lib64/python2.5/site-packages/django/core/urlresolvers.pyc in reverse(self, lookup_view, *args, **kwargs) 239 return candidate 240 raise NoReverseMatch("Reverse for '%s' with arguments '%s' and keyword " --> 241 "arguments '%s' not found." % (lookup_view, args, kwargs)) 242 243 def resolve(path, urlconf=None): NoReverseMatch: Reverse for 'entry_view' with arguments '()' and keyword arguments '{'member': u'seemant', 'year': 2006, 'slug': u'the-master-cleanse-day-2', 'day': '03', 'month': 'dec'}' not found.
Change History (12)
comment:1 by , 16 years ago
comment:2 by , 16 years ago
Cc: | added |
---|
comment:3 by , 16 years ago
this is my test case with django r9699
blog/models.py:
class Post(models.Model): """Post model.""" title = models.CharField(_('title'), max_length=200) slug = models.SlugField(_('slug'), unique_for_date='publish') publish = models.DateTimeField(_('publish')) @permalink def get_absolute_url(self): return ('blog_detail', None, { 'year': self.publish.year, 'month': self.publish.strftime('%b').lower(), 'day': self.publish.day, 'slug': self.slug })
urls.py:
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^blog/(.*)', include('basic.blog.urls')), )
blog/urls.py:
from django.conf.urls.defaults import * from blog import views as blog_views urlpatterns = patterns('', url(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{1,2})/(?P<slug>[-\w]+)/$', view=blog_views.post_detail, name='blog_detail'), )
./manage.py shell:
>>> from blog.models import Post >>> Post.objects.all() [<Post: Donec non tortor in arcu mollis feugiat>, <Post: title>] >>> p = Post.objects.all()[0] >>> p <Post: Donec non tortor in arcu mollis feugiat> >>> p.get_asbolute_url() Traceback (most recent call last): File "<console>", line 1, in <module> AttributeError: 'Post' object has no attribute 'get_asbolute_url' >>> p.get_absolute_url() Traceback (most recent call last): File "<console>", line 1, in <module> File "/Library/Python/2.5/site-packages/django/utils/functional.py", line 55, in _curried return _curried_func(*(args+moreargs), **dict(kwargs, **morekwargs)) File "/Library/Python/2.5/site-packages/django/db/models/base.py", line 532, in get_absolute_url return settings.ABSOLUTE_URL_OVERRIDES.get('%s.%s' % (opts.app_label, opts.module_name), func)(self, *args, **kwargs) File "/Library/Python/2.5/site-packages/django/db/models/__init__.py", line 30, in inner return reverse(bits[0], None, *bits[1:3]) File "/Library/Python/2.5/site-packages/django/core/urlresolvers.py", line 254, in reverse *args, **kwargs))) File "/Library/Python/2.5/site-packages/django/core/urlresolvers.py", line 243, in reverse "arguments '%s' not found." % (lookup_view, args, kwargs)) NoReverseMatch: Reverse for 'blog_detail' with arguments '()' and keyword arguments '{'year': 2008, 'slug': u'donec-non-tortor', 'day': 29, 'month': 'nov'}' not found.
comment:4 by , 16 years ago
Cc: | removed |
---|
follow-up: 7 comment:6 by , 16 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
follow-up: 8 comment:7 by , 16 years ago
Replying to kratorius:
What's the reason for closing this as invalid? The person (gogna) who said "sorry, I just found the error was mine. I apologize for the noise" is not the same as person who originally opened the ticket (seemant). I do wish gonga had said what, exactly, the error was, perhaps it is the same problem as the original poster, but I'm not sure that's 100% obvious from what we have here.
comment:8 by , 16 years ago
Resolution: | invalid |
---|---|
Status: | closed → reopened |
Replying to kmtracey: woops, sorry for closing this, I just made confusion with names.
comment:9 by , 16 years ago
For some reason, I don't get emailed on updates, so I didn't see the comments till just now. I'm so sorry for the latency. I will put my examples up here in just a few minutes
comment:10 by , 16 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:11 by , 16 years ago
The error in gogna's example in comment:3 is in the urls.py
file. That pattern is capturing everything after the string "/blog/"
(the (.*)
part) and leaving nothing for the patterns in blog/urls.py
to match against. Changing the urls.py pattern line to
#python (r'^blog/', include('blog.urls')),
fixes that problem.
So I'm still in the position of not being able to repeat this problem. Unless somebody comes up with a reliable failing case in the next few weeks, I think we're going to have to close this as invalid. I've created a lot of different variations on the original problem report and none of them have failed.
comment:12 by , 16 years ago
Resolution: | → worksforme |
---|---|
Status: | reopened → closed |
Try as I might, I cannot reproduce this problem. If you could construct a very small, self-contained example that reliably demonstrates the problem, that might make things easier to debug. I can't see how this could be happening and all the tests I create to replicate it, including making a small project with a similar structure to yours, pass.