Opened 18 years ago
Last modified 18 years ago
#4319 closed
urlresolvers.RegexURLPattern._get_callback doesn't handle ValueError — at Version 2
| Reported by: | Owned by: | Adrian Holovaty | |
|---|---|---|---|
| Component: | Core (Other) | Version: | dev |
| Severity: | Keywords: | url resolver _get_callback | |
| 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 )
It seems import raises a ValueError if the module name is empty. This can occur in _get_callback and isn't handled properly:
Using a named URL pattern "blog-post" in a permalink-decorated get_absolute_url method causes the exception detailed below.
Switching the name to "blog.post" instead fools the reverse functions into allowing it because _get_callback receives a non-empty module name.
Traceback (most recent call last):
File "d:\python25\Lib\site-packages\django\template\__init__.py" in render_node
741. result = node.render(context)
File "d:\python25\Lib\site-packages\django\template\defaulttags.py" in render
125. nodelist.append(node.render(context))
File "d:\python25\Lib\site-packages\django\template\__init__.py" in render
791. output = self.filter_expression.resolve(context)
File "d:\python25\Lib\site-packages\django\template\__init__.py" in resolve
576. obj = resolve_variable(self.var, context)
File "d:\python25\Lib\site-packages\django\template\__init__.py" in resolve_variable
674. current = current()
File "d:\python25\Lib\site-packages\django\utils\functional.py" in _curried
3. return _curried_func(*(args+moreargs), **dict(kwargs, **morekwargs))
File "d:\python25\Lib\site-packages\django\db\models\base.py" in get_absolute_url
453. return settings.ABSOLUTE_URL_OVERRIDES.get('%s.%s' % (opts.app_label, opts.module_name), func)(self)
File "d:\python25\Lib\site-packages\django\db\models\__init__.py" in inner
27. return reverse(bits[0], None, *bits[1:3])
File "d:\python25\Lib\site-packages\django\core\urlresolvers.py" in reverse
251. return '/' + resolver.reverse(viewname, *args, **kwargs)
File "d:\python25\Lib\site-packages\django\core\urlresolvers.py" in reverse
222. return pattern.reverse_helper(lookup_view, *args, **kwargs)
File "d:\python25\Lib\site-packages\django\core\urlresolvers.py" in reverse_helper
233. sub_match = self.reverse(lookup_view, *args, **kwargs)
File "d:\python25\Lib\site-packages\django\core\urlresolvers.py" in reverse
225. elif pattern.callback == lookup_view or pattern.name == lookup_view:
File "d:\python25\Lib\site-packages\django\core\urlresolvers.py" in _get_callback
134. self._callback = getattr(__import__(mod_name, {}, {}, ['']), func_name)
ValueError at /blog/articles/
Empty module name
Change History (2)
comment:1 by , 18 years ago
comment:2 by , 18 years ago
| Description: | modified (diff) |
|---|
Could you give an example of a url pattern and the associated get_absolute_url() method that causes this problem, please?
Can't get this to work at all in fact.
Switching to "blog.post" (an existing named urlpattern) causes NoReverseMatch exceptions.
Using the generic view name "django.views.generic.date_based.object_detail" causes ValueErrors because of empty module name in import.