This is an app sort of like Django's contrib.flatpages, but without the database. It's got a Fallback Middleware that just serves static html documents from your filesystem.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
staticflatpages update test urlconf and calls to reverse Jan 3, 2019
.gitignore Minor fixes. May 18, 2014
LICENSE convert from rst to md for the README Jan 2, 2019 update README reference Jan 3, 2019 support for index templates; requested in #5 Jan 3, 2019 update classifiers Jan 3, 2019


Current Release License Maintenance

It's like flatpages, but with templates

This is like Django's built-in contrib.flatpages app, but without the database. It's just static html documents served from your filesystem.


I've been using the flatpages app for a long time, but somewhere along the line I started keeping my flatpage content (snippets of html) in the git repo with the rest of my project. Any time I made a change to a flatpage, I'd edit the file locally, commit the changes, then copy and paste the new content into the relevant flatpage.

Why not just serve these from my templates directory?

That's what staticflatpages does.


Install the latest release with pip:

pip install django-staticflatpages


The most recent version of this app targets Django 2.1+ and Python 3.6+. Download a previous release for older versions of Django.

You can run the test suite with python test staticflatpages, and open an Issue on Github if you run into any problems.


  1. Add staticflatpages to your INSTALLED_APPS.
  2. Add staticflatpages.middleware.StaticFlatpageFallbackMiddleware to your MIDDLEWARE settings.
  3. Create a staticflatpages template directory. This should be a subdirectory of one of the templates in your TEMPLATES setting. Any templates you include here (except for a base.html) will get served as a static page.

For example, assuming your project-level template directory is named "templates", then:

  • The url /about/ will render templates/staticflatpages/about.html
  • The url /about/team/ will render templates/staticflatpages/about/team.html
  • If you include an index template (templates/staticflatpages/index.html), and no other url maps to /, it will get used as your index.


This app also supports sitemaps for staticflatpages. To enable these, you'll need to have django.contrib.sitemaps listed in your INSTALLED_APPS setting. Then, set up a sitemap (e.g. in your Root URLconf):

from staticflatpages.sitemaps import StaticFlatpageSitemap

sitemaps = {
    'staticflatpages': StaticFlatpageSitemap,

Don't forget to include your sitemaps urls as normal, e.g.:

    {'sitemaps': sitemaps},
    {'sitemaps': sitemaps},

NOTE: The sitemaps framework also requires the sites framework so you'll need that installed, and you'll also need to define a SITE_ID.


If you use the sitemaps feature, you may also want to include the following settings:

  • STATICFLATPAGES_CHANGEFREQ: Corresponds to the Sitemap.changefreq attribute (defaults to never).
  • STATICFLATPAGES_PRIORITY: Corresponds to the Sitemap.priority attribute (defaults to 0.5).


This app could work with with django-dirtyedit, which allows you to edit files from the admin (if you're so inclined).


This code is distributed under the terms of the MIT license. See the LICENSE file.