2011-06-07 52 views
2

我试图颠倒一个名为blog-home的命名url,但无论我尝试什么,它总是会抛出一个AttributeError与描述'NoneType' object has no attribute 'rindex'reverse()在调用时抛出AttributeError

我试过reverse("blog-home")reverse("blogengine:blog-home")甚至reverse("admin:index")reverse(resolve("/admin/"))只是为了测试,如果我的代码是问题。

回溯:

 
Traceback (most recent call last): 
    File "", line 1, in 
    File "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\core\urlresolvers.py", line 368, in reverse 
    app_list = resolver.app_dict[ns] 
    File "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\core\urlresolvers.py", line 241, in _get_app_dict 
    self._populate() 
    File "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\core\urlresolvers.py", line 208, in _populate 
    for name in pattern.reverse_dict: 
    File "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\core\urlresolvers.py", line 229, in _get_reverse_dict 
    self._populate() 
    File "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\core\urlresolvers.py", line 220, in _populate 
    lookups.appendlist(pattern.callback, (bits, p_pattern)) 
    File "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\core\urlresolvers.py", line 169, in _get_callback 
    mod_name, func_name = get_mod_func(self._callback_str) 
    File "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\core\urlresolvers.py", line 113, in get_mod_func 
    dot = callback.rindex('.') 
AttributeError: 'NoneType' object has no attribute 'rindex' 

我真的不知道为什么会这样,尤其是我用reverse成功地在其他项目上使用相同版本的Python和Django的,而且我还没有找到迄今为止任何有关此错误的任何信息。

我的urls.py:

 
from django.conf.urls.defaults import patterns, include, url 

from . import views 
from .models import Post, Tag 

from django.views.generic import DetailView, ListView 

urlpatterns = patterns('', 
    url(r'^$', ListView.as_view(queryset=Post.objects.order_by('-pub_date')), name="blog-home"), 
    url(r'^yadda/$', None) 
) 

这是由这个urls.py进口:

 
from django.conf.urls.defaults import patterns, include, url 

from django.contrib import admin 
admin.autodiscover() 

from django.contrib.sitemaps import FlatPageSitemap 

class FlatPageSitemap(FlatPageSitemap): 
    changefreq = "daily" 

sitemaps = { 
    'flatpages': FlatPageSitemap, 
} 

import django.contrib.sitemaps.views 
from . import blogengine 

urlpatterns = patterns('', 
    url(r'^', include(blogengine.urls)), 
    url(r'^sitemap\.xml', django.contrib.sitemaps.views.sitemap, {'sitemaps': sitemaps}), 
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 
    url(r'^admin/', include(admin.site.urls)), 
) 

我本来打算从Django的模板系统与URL标记使用它({% url blog-home %} )。

+0

你能告诉我们你的urls.py包含'blog-home'和你正在调用'reverse'方法的代码。显然,有些东西是空的。 – 2011-06-07 16:33:10

+0

我现在只是在调试时从'manage.py shell'交互式shell调用'reverse'。 – 2011-06-07 16:34:56

+0

point @ cx42net正在做的事情是有很多东西影响'reverse'。这可能会扼杀urls.py中的内容或您的某个观点。如何调用'reverse'没有什么问题,所以错误必须在代码中的其他位置。我们需要更多的上下文来进一步帮助您。 – 2011-06-07 16:37:34

回答

4

不要做:

url(r'^yadda/$', None) 

如果指定在conf的URL,它必须绑定到的东西。如果您不想绑定它,请不要指定它。

+0

你说得对。注意自己:下次不要只放置占位符urlconfigs。 – 2011-06-07 16:43:36

相关问题