user1504605
user1504605

Reputation: 589

Django flatpages Do Not Work

I'm reading and following the book "Practical Django Projects: Second Edition" and a lot of the book already is out of date to the point where an entire chapter won't work at all. Right now I'm trying to create my first flat page and I'm getting a 404 error.

I'm trying to use the built in 'django.contrib.flatpages' app and I've already created my first flatpage via the admin panel:

enter image description here

Here's my urls.py file:

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',


    url(r'^admin/', include(admin.site.urls)),
    (r'', include('django.contrib.flatpages.urls')) #ADDED THIS LINE FOR FLATPAGES
)

Here's what I've done to my settings.py file so far:

SITE_ID = 1 # REQUIRED FOR 'django.contrib.flatpages'


INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'django.contrib.flatpages', # ADDED FOR FLATPAGES
    'south',
)

MIDDLEWARE_CLASSES = (
    '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',
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', #FOR FLATPAGES
)

So that's about all that I've done so far and I'm expecting a "TemplateDoesNotExist at /first-page/" when navigating to like the book says: http://example.com:1006/first-page/

But instead of that, I'm simply getting a 404 error.

Am I doing this correctly or did a new Django version depreciate the way to make flatpages?

Upvotes: 4

Views: 2437

Answers (2)

user1504605
user1504605

Reputation: 589

I finally figured it out, and every resource online doesn't mention this at all. They never even cover this stuff in the entire chapter from the Apress book. Hopefully everyone else from here on out doesn't have to spend 3 hours on this solution.

enter image description here

So the solution is, make sure that the SITE_ID in the settings.py file matches the number in the URL of the site when clicking "change site" in the admin panel. As you can see in the image above, for me the number is "4" which is the site ID. So my settings.py should look like this:

SITE_ID = 4

There are many threads like this one where people just say "change it to 1", which is misleading. Make sure the number matches your site ID!

Upvotes: 10

Andrew Sledge
Andrew Sledge

Reputation: 10351

Page 18, at the bottom: "Introducing the Django Template System". Follow the directions to create the template directory, add it to to TEMPLATE_DIRS, and create your template file in that directory. (pages 18-21)

Upvotes: -1

Related Questions