Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django attribute error. 'module' object has no attribute 'rindex'

Tags:

python

django

I've just started using django, only on chapter 3 of the online book.

I keep on getting this weird error when I try and access the site.

AttributeError at /test/ 'module' object has no attribute 'rindex'

my urls.py is just

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

and my hello function is in mysite. Python path is

['/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']

I don't really understand whats going on here. I'm assuming I'm overlooking something stupid, because it seems so straightforward. When I do from mysite import hello in the python interpreter, it doesn't raise any errors.

any help would be great

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 function is

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello world")
like image 520
James Avatar asked Aug 13 '11 18:08

James


2 Answers

You probably need to change

from mysite import hello

to something like

from mysite.hello_file import hello_view

And then use:

('^test/$',hello_view)

Because you need to pass a (view) function, not a file or module. As I think mgalgs was trying to explain, but I think a bit unclear for beginners.

like image 144
Mark Avatar answered Sep 30 '22 01:09

Mark


I got this error when adding a Class Based View the following way:

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

of course .as_view() should be added to fix error object has no attribute 'rindex':

url(r'^tv/$', views.MyTemplateView.as_view(), name='my_tv'),
like image 20
SaeX Avatar answered Sep 30 '22 01:09

SaeX