Reputation: 1
I am trying to do the django 1.8 tutorial, I am on part 3, and I am getting a Exception Value: 'module' object has no attribute 'index'
error. It seems like it is not correctly importing the views.py. Any Help? Thanks!
Here is my urls.py:
from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
)
Here is my views.py:
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello, World. You're at the polls index")
Here is my error output:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/polls
Django Version: 1.8.3
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.3-py2.7.egg/django/core/handlers/base.py" in get_response
108. response = middleware_method(request)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.3-py2.7.egg/django/middleware/common.py" in process_request
74. if (not urlresolvers.is_valid_path(request.path_info, urlconf) and
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.3-py2.7.egg/django/core/urlresolvers.py" in is_valid_path
647. resolve(path, urlconf)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.3-py2.7.egg/django/core/urlresolvers.py" in resolve
522. return get_resolver(urlconf).resolve(path)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.3-py2.7.egg/django/core/urlresolvers.py" in resolve
366. for pattern in self.url_patterns:
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.3-py2.7.egg/django/core/urlresolvers.py" in url_patterns
402. patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.3-py2.7.egg/django/core/urlresolvers.py" in urlconf_module
396. self._urlconf_module = import_module(self.urlconf_name)
File "/usr/lib/python2.7/importlib/__init__.py" in import_module
37. __import__(name)
File "/home/polsen/scripts_i_wrote/python/mysite/mysite/urls.py" in <module>
11. url(r'^polls/', include('polls.urls')),
File "/usr/local/lib/python2.7/dist-packages/Django-1.8.3-py2.7.egg/django/conf/urls/__init__.py" in include
33. urlconf_module = import_module(urlconf_module)
File "/usr/lib/python2.7/importlib/__init__.py" in import_module
37. __import__(name)
File "/home/polsen/scripts_i_wrote/python/mysite/polls/urls.py" in <module>
6. url(r'^$', views.index, name='index'),
Exception Type: AttributeError at /polls
Exception Value: 'module' object has no attribute 'index'
Folder Structure:
mysites/.
./polls
./polls/views.py
./polls/__init__.pyc
./polls/admin.py
./polls/admin.pyc
./polls/urls.py
./polls/models.pyc
./polls/migrations
./polls/migrations/__init__.pyc
./polls/migrations/0001_initial.pyc
./polls/migrations/0001_initial.py
./polls/migrations/__init__.py
./polls/tests.py
./polls/views.pyc
./polls/urls.pyc
./polls/models.py
./polls/__init__.py
./mysite
./mysite/__init__.pyc
./mysite/wsgi.py
./mysite/settings.py
./mysite/urls.py
./mysite/settings.pyc
./mysite/urls.pyc
./mysite/__init__.py
./mysite/wsgi.pyc
./manage.py
Upvotes: 0
Views: 445
Reputation: 47846
Try:
from . import views # relative import
The actual code in the tutorial is:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
Also, in Django 1.8 urlpatterns
should be a list of django.conf.urls.url()
instances.
As per Django 1.8 docs:
urlpatterns
should be a Python list ofdjango.conf.urls.url()
instances.
In Django 1.7, urlpatterns
variable used to be a Python list, in the format returned by the function django.conf.urls.patterns()
.
Upvotes: 1
Reputation: 10256
It's an import error, try:
from polls.views import index
And in the url:
url(r'^$', index, name='index'),
EDIT
Not only for the tutorial:
If urls.py
and views.py
are at the same level, use:
from . import views
And in url:
url(r'^$', views.index, name='index'),
Upvotes: 0
Reputation: 4186
If you are following the tutorial closely, you’ll see that in urls.py
, your
from poll import views
is in fact
from . import views
Upvotes: 1