Django属性错误。 'module'对象没有属性'rindex'

时间:2011-08-13 18:50:06

标签: python django

我刚刚开始使用django,仅在在线书的第3章。

当我尝试访问该网站时,我继续发现这个奇怪的错误。

/ test /的AttributeError 'module'对象没有属性'rindex'

我的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),
)

我的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']

我真的不明白这里发生了什么。我假设我忽视了一些愚蠢的东西,因为它看起来很简单。当我在python解释器中使用mysite import hello时,它不会引发任何错误。

任何帮助都会很棒

编辑: 回溯

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'

你好函数是

from django.http import HttpResponse

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

4 个答案:

答案 0 :(得分:16)

您可能需要更改

from mysite import hello

类似

from mysite.hello_file import hello_view

然后使用:

('^test/$',hello_view)

因为您需要传递(视图)功能,而不是文件或模块。我认为mgalgs试图解释,但我认为初学者有点不清楚。

答案 1 :(得分:4)

url模式应该是字符串的元组,而不是模块。类似的东西:

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

编辑:您还可以将可调用对象传递给模式。我以前从未见过这样做过(文档总是传递一个字符串)。然而,你实际上是在传递一个模块,而不是一个字符串或一个可调用的(所以django会混淆并首先将它视为必须是可调用的,因为它不是一个字符串但是然后返回trying to treat it like a string,因此调用到rindex)。也许你打算像hello.views.hello这样通过:

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

或者,您可以将导入行更改为from mysite.hello.views import hello,或者只使用字符串语法(我相信'hello.views.hello'会按照最初建议的方式执行此操作)。

答案 2 :(得分:3)

以下列方式添加基于类的视图时出现此错误:

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'),

答案 3 :(得分:0)

试试这个

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