hep
hep

Reputation: 1

django 1.8 tutorial part 3

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

Answers (3)

Rahul Gupta
Rahul Gupta

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 of django.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

Gocht
Gocht

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

301_Moved_Permanently
301_Moved_Permanently

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

Related Questions