Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Django Basics Model Administration First App View

Craig Campbell
Craig Campbell
14,428 Points

why is django include() not working?

I am following along with the django basics course, and everything works until I try to mount a view at /courses using include():

urlpatterns = [
    url(r'^courses/', include('courses.urls')),
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.hello_world),
]

Now when I runserver, I get NameError 'include' is not defined.

I had been using django1.9 but i uninstalled it and installed 1.8 to be in sync with the course. but same error. Now instead of an error not letting the server go up, the server lets me go to the site where it THEN tells me about the error (in django 1.9 i couln't get the server up).

Now if I take out the courses/ route and the include() then it runs fine in both 1.8 and 1.9.

Ideas?

4 Answers

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 68,441 Points

Did you remember to import include:

 from django.conf.urls import include

See Django docs

Kyle Salisbury
seal-mask
.a{fill-rule:evenodd;}techdegree
Kyle Salisbury
Full Stack JavaScript Techdegree Student 16,363 Points

Chris is right here. Kenneth is using an older version of Django. So the from django.conf.urls import include is already there. In newer versions of Django, the include admin is not required anymore so django does not already have the import include part. So all you need to do to fix this in newer versions is just add the import of include there.

Craig Campbell
Craig Campbell
14,428 Points

wow thanks. Didn't think of that since I don't recall seeing that in the video. Should have been obvious! Thanks!!

Gavin Ralston
Gavin Ralston
28,770 Points

I'm following along with Django 1.9.x and it looks a little different. He didn't have to manually type the 'include' import because it appears to have been generated automatically, but the urls.py appeared just slightly different for me by default (barely, but that import statement was the problem)

from django.conf.urls import url, include  #  include wasn't part of the generated import statement
from django.contrib import admin
from . import views

urlpatterns = [
    url(r'^courses/', include('courses.urls')),
    url(r'^admin/', admin.site.urls),   # this isn't sent in to the include() function.
    url(r'^$', views.hello_world),
]
Jennifer Liu
Jennifer Liu
1,636 Points

Hi, I am on the same problem. For me, when I try to run server on port 8000, it wouldn't let me because it says 'courses' not found. This is my code, and I don't see what is wrong with that.

from django.conf.urls import include, url
from django.contrib import admin
from courses import views 
from . import views

urlpatterns = [
   url(r'^courses/',include(courses.urls)),
   url(r'^admin/', include(admin.site.urls)),
   url(r'^$',views.hello_world),
]
Chris Freeman
Chris Freeman
Treehouse Moderator 68,441 Points

Try changing "from courses import views"

To "import courses"

The last import line overrides the import of views from courses anyway.

Daniel Henderson
Daniel Henderson
6,768 Points

include('courses.urls')),

the thing to include needs to be a string, and he says django will take this to mean a path. I guess django has a special way to indicate a compact, cross-platform path to a file, but it's got to be in quotes.

Jennifer Liu
Jennifer Liu
1,636 Points

Hi, so that worked, but now I am getting another error. It says module courses' has no attribute 'urls' But in my courses, I do have a url.py and in there I added

from django.conf.urls import url

from . import views   

urlpatterns = [
  url(r'^$',views.course_list),
]
Daniel Petrov
Daniel Petrov
3,495 Points

You have to put courses.urls in quotes

url(r'^courses/',include('courses.urls')),