reverse () выдает ошибку атрибута при вызове

#python #django

#python #django

Вопрос:

Я пытаюсь отменить именованный URL-адрес, вызываемый blog-home но независимо от того, что я пытаюсь, он всегда выдает AttributeError с описанием 'NoneType' object has no attribute 'rindex' .

Я пробовал reverse("blog-home") , reverse("blogengine:blog-home") и даже reverse("admin:index") и reverse(resolve("/admin/")) просто чтобы проверить, был ли проблема в моем коде.

Обратная трассировка:

Обратная трассировка (последний вызов последним):
 Файл "", строка 1, в 
 Файл "C:Python27libsite-packagesdjango-1.3-py2.7.eggdjangocoreurlresolvers.py ", строка 368, в обратном порядке 
 app_list = resolver.app_dict[ns]
 Файл "C:Python27libsite-packagesdjango-1.3-py2.7.eggdjangocoreurlresolvers.py ", строка 241, в _get_app_dict 
 self._populate()
 Файл "C:Python27libsite-packagesdjango-1.3-py2.7.eggdjangocoreurlresolvers.py ", строка 208, в _populate 
 для имени в шаблоне.reverse_dict:
 Файл "C:Python27libsite-packagesdjango-1.3-py2.7.eggdjangocoreurlresolvers.py ", строка 229, в _get_reverse_dict 
 self._populate()
 Файл "C:Python27libsite-packagesdjango-1.3-py2.7.eggdjangocoreurlresolvers.py ", строка 220, в _populate 
 поисковые запросы.список приложений(шаблон.обратный вызов, (биты, p_pattern))
 Файл "C:Python27libsite-packagesdjango-1.3-py2.7.eggdjangocoreurlresolvers.py ", строка 169, в _get_callback 
 имя_модели, имя_функции = get_mod_func(self._callback_str)
 Файл "C:Python27libsite-packagesdjango-1.3-py2.7.eggdjangocoreurlresolvers.py ", строка 113, в get_mod_func 
 точка = обратный вызов.rindex('.')
Ошибка атрибута: объект 'NoneType' не имеет атрибута 'rindex'

Я действительно не уверен, почему это происходит, тем более, что я успешно использовал reverse в других проектах с той же версией Python и Django, и я пока ничего не нашел об этой ошибке где-либо еще.

Мой urls.py:

из django.conf.urls.defaults импортируйте шаблоны, включая url

От. импорт представлений 
из .models импортируйте сообщение, тег

из django.views.generic import DetailView, ListView

urlpatterns = patterns(", 
 url(r '^ $', ListView.as_view(набор запросов=Post.objects.order_by('-pub_date')), name="blog-home"), 
 url(r'^yadda /$', Нет) 
)

Которая импортируется этим urls.py:

из django.conf.urls.defaults импортируйте шаблоны, включая url

от администратора импорта django.contrib 
admin.autodiscover()

из django.contrib.sitemaps импортируйте FlatPageSitemap

карта плоских страниц класса (FlatPageSitemap):
 частота изменений = "ежедневно"

sitemaps = {
 'flatpages': FlatPageSitemap, 
}

импортируйте django.contrib.sitemaps.views 
из . импорт blogengine

urlpatterns = patterns(", 
 url(r'^', включает(blogengine.urls)), 
 url(r'^sitemap.xml ', django.contrib.sitemaps.views.sitemap, {'sitemaps': карты сайта}), 
 url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 
 url(r'^admin/', включает(admin.site.urls)), 
)

Изначально я намеревался использовать ее из системы шаблонов Django с тегом url ( {% url blog-home %} ).

Комментарии:

1. не могли бы вы показать нам свой urls.py содержащий blog-home и код, который вы используете, где вызывается reverse метод. По-видимому, что-то равно нулю.

2. Пока я просто вызываю reverse из manage.py shell интерактивной оболочки во время отладки.

3. Точка зрения @cx42net заключается в том, что есть много вещей, которые влияют reverse . Это может быть связано с чем-то в urls.py или в одном из ваших представлений. В том, как вы вызываете, нет ничего плохого reverse , поэтому ошибка должна быть где-то еще в вашем коде. Нам нужно больше контекста, чтобы помочь вам в дальнейшем.

4. Хорошо, @chrisdpratt, но я не совсем уверен в том, какой именно контекст вам нужен.

Ответ №1:

Не делайте этого:

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

Если вы указываете URL в conf, он должен быть к чему-то привязан. Если вы не хотите его привязывать, не указывайте его.

Комментарии:

1. Вы правы. Примечание для себя: в следующий раз просто не размещайте urlconfigs-заполнители.