Ошибка атрибута Django.У объекта 'module' нет атрибута 'rindex' - PullRequest
18 голосов
/ 13 августа 2011

Я только начал использовать django, только в главе 3 онлайн-книги.

Я продолжаю получать эту странную ошибку, когда пытаюсь зайти на сайт.

AttributeError at /Объект test / 'module' не имеет атрибута 'rindex'

my urls.py просто

from django.conf.urls.defaults import *
from mysite import hello
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
      ('^test/$',hello),
)

, и моя функция приветствия находится в mysite.Путь к Python

['/home/james/django/mysite', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/pymodules/python2.6', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/home/james/django']

Я не совсем понимаю, что здесь происходит.Я предполагаю, что пропускаю что-то глупое, потому что это кажется таким простым.Когда я делаю из mysite import hello в интерпретаторе python, он не вызывает никаких ошибок.

любая помощь будет очень полезна

edit: traceback

Environment:

Request Method: GET
Request URL: http://127.0.0.1:8000/test/
Django Version: 1.2.3
Python Version: 2.6.6
Installed Applications:
['django.contrib.auth',
 'django.co
 ntrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.sites',
     'django.contrib.messages']
    Installed Middleware:
    ('django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py" in get_response
  91.                         request.path_info)
File "/usr/lib/pymodules/python2.6/django/core/urlresolvers.py" in resolve
  217.                     sub_match = pattern.resolve(new_path)
File "/usr/lib/pymodules/python2.6/django/core/urlresolvers.py" in resolve
  123.             return self.callback, args, kwargs
File "/usr/lib/pymodules/python2.6/django/core/urlresolvers.py" in _get_callback
  134.             mod_name, func_name = get_mod_func(self._callback_str)
File "/usr/lib/pymodules/python2.6/django/core/urlresolvers.py" in get_mod_func
  78.         dot = callback.rindex('.')

Exception Type: AttributeError at /test/
Exception Value: 'module' object has no attribute 'rindex'

helloфункция

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello world")

Ответы [ 4 ]

16 голосов
/ 03 мая 2012

Возможно, вам нужно изменить

from mysite import hello

что-то вроде

from mysite.hello_file import hello_view

А затем используйте:

('^test/$',hello_view)

Потому что вам нужно передать (просмотр) функцию, а не файл или модуль. Как я думаю, mgalgs пытался объяснить, но я думаю, что немного непонятно для начинающих.

4 голосов
/ 13 августа 2011

Шаблон URL должен быть набором строк, а не модулем. Что-то вроде:

urlpatterns = patterns('',
      ('^test/$','hello.views.hello'), 
)

РЕДАКТИРОВАТЬ: Вы также можете передать вызываемый шаблон. Я просто никогда не видел, чтобы это делалось таким образом (документы всегда передают строку). Тем не менее, вы фактически передаете модуль, а не строку или вызываемый объект (поэтому django запутывается и сначала обрабатывает его так, как будто он должен вызываться, поскольку это не строка, но затем возвращается к , пытаясь обработать его как строка , следовательно, вызов rindex). Может быть, вы хотели передать hello.views.hello так:

urlpatterns = patterns('',
      ('^test/$',hello.views.hello), 
)

В качестве альтернативы, вы можете изменить строку импорта на from mysite.hello.views import hello или просто использовать строковый синтаксис (я думаю, что 'hello.views.hello' сделает это так, как было изначально предложено).

3 голосов
/ 17 октября 2015

Я получил эту ошибку при добавлении просмотра на основе классов следующим образом:

url(r'^tv/$', views.MyTemplateView(), name='my_tv'),

конечно .as_view() необходимо добавить, чтобы исправить ошибку object has no attribute 'rindex':

url(r'^tv/$', views.MyTemplateView.as_view(), name='my_tv'),
0 голосов
/ 14 января 2012

Попробуйте это

urlpatterns = patterns('',      
    ('r^test/$','hello.views.hello'),  ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...