2005-11-11 12:45:05 +08:00
|
|
|
=================
|
|
|
|
The flatpages app
|
|
|
|
=================
|
|
|
|
|
|
|
|
Django comes with an optional "flatpages" application. It lets you store simple
|
|
|
|
"flat" HTML content in a database and handles the management for you.
|
|
|
|
|
|
|
|
A flatpage is a simple object with a URL, title and content. Use it for
|
|
|
|
one-off, special-case pages, such as "About" or "Privacy Policy" pages, that
|
|
|
|
you want to store in a database but for which you don't want to develop a
|
|
|
|
custom Django application.
|
|
|
|
|
|
|
|
A flatpage can use a custom template or a default, systemwide flatpage
|
|
|
|
template. It can be associated with one, or multiple, sites.
|
|
|
|
|
|
|
|
Here are some examples of flatpages on Django-powered sites:
|
|
|
|
|
|
|
|
* http://www.chicagocrime.org/about/
|
|
|
|
* http://www.lawrence.com/about/contact/
|
|
|
|
|
|
|
|
Installation
|
|
|
|
============
|
|
|
|
|
2006-03-16 10:57:30 +08:00
|
|
|
To install the flatpages app, follow these steps:
|
2005-11-11 12:45:05 +08:00
|
|
|
|
|
|
|
1. Add ``"django.contrib.flatpages"`` to your INSTALLED_APPS_ setting.
|
|
|
|
2. Add ``"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware"``
|
|
|
|
to your MIDDLEWARE_CLASSES_ setting.
|
|
|
|
3. Run the command ``django-admin.py install flatpages``.
|
|
|
|
|
|
|
|
.. _INSTALLED_APPS: http://www.djangoproject.com/documentation/settings/#installed-apps
|
|
|
|
.. _MIDDLEWARE_CLASSES: http://www.djangoproject.com/documentation/settings/#middleware-classes
|
|
|
|
|
|
|
|
How it works
|
|
|
|
============
|
|
|
|
|
|
|
|
``django-admin.py install flatpages`` creates two tables in your database:
|
|
|
|
``django_flatpages`` and ``django_flatpages_sites``. ``django_flatpages`` is a
|
|
|
|
simple lookup table that essentially maps a URL to a title and bunch of text
|
|
|
|
content. ``django_flatpages_sites`` associates a flatpage with a site.
|
|
|
|
|
|
|
|
The ``FlatpageFallbackMiddleware`` does all of the work. Each time any Django
|
|
|
|
application raises a 404 error, this middleware checks the flatpages database
|
|
|
|
for the requested URL as a last resort. Specifically, it checks for a flatpage
|
|
|
|
with the given URL with a site ID that corresponds to the SITE_ID_ setting.
|
|
|
|
|
|
|
|
If it finds a match, it follows this algorithm:
|
|
|
|
|
|
|
|
* If the flatpage has a custom template, it loads that template. Otherwise,
|
|
|
|
it loads the template ``flatpages/default``.
|
|
|
|
* It passes that template a single context variable, ``flatpage``, which is
|
|
|
|
the flatpage object. It uses DjangoContext_ in rendering the template.
|
|
|
|
|
|
|
|
If it doesn't find a match, the request continues to be processed as usual.
|
|
|
|
|
|
|
|
The middleware only gets activated for 404s -- not for 500s or responses of any
|
|
|
|
other status code.
|
|
|
|
|
|
|
|
Note that the order of ``MIDDLEWARE_CLASSES`` matters. Generally, you can put
|
|
|
|
``FlatpageFallbackMiddleware`` at the end of the list, because it's a last
|
|
|
|
resort.
|
|
|
|
|
|
|
|
For more on middleware, read the `middleware docs`_.
|
|
|
|
|
|
|
|
.. _SITE_ID: http://www.djangoproject.com/documentation/settings/#site-id
|
|
|
|
.. _DjangoContext: http://www.djangoproject.com/documentation/templates_python/#subclassing-context-djangocontext
|
|
|
|
.. _middleware docs: http://www.djangoproject.com/documentation/middleware/
|
|
|
|
|
|
|
|
How to add, change and delete flatpages
|
|
|
|
=======================================
|
|
|
|
|
|
|
|
Via the admin interface
|
|
|
|
-----------------------
|
|
|
|
|
|
|
|
If you've activated the automatic Django admin interface, you should see a
|
|
|
|
"Flatpages" section on the admin index page. Edit flatpages as you edit any
|
|
|
|
other object in the system.
|
|
|
|
|
|
|
|
Via the Python API
|
|
|
|
------------------
|
|
|
|
|
|
|
|
Flatpages are represented by a standard `Django model`_, which lives in
|
|
|
|
`django/contrib/flatpages/models/flatpages.py`_. You can access flatpage
|
|
|
|
objects via the `Django database API`_.
|
|
|
|
|
|
|
|
.. _Django model: http://www.djangoproject.com/documentation/model_api/
|
|
|
|
.. _django/contrib/flatpages/models/flatpages.py: http://code.djangoproject.com/browser/django/trunk/django/contrib/flatpages/models/flatpages.py
|
|
|
|
.. _Django database API: http://www.djangoproject.com/documentation/db_api/
|
|
|
|
|
|
|
|
Flatpage templates
|
|
|
|
==================
|
|
|
|
|
|
|
|
By default, flatpages are rendered via the template ``flatpages/default``, but
|
|
|
|
you can override that for a particular flatpage.
|
|
|
|
|
|
|
|
Creating the ``flatpages/default`` template is your responsibility; in your
|
|
|
|
template directory, just create a ``flatpages`` directory containing a file
|
|
|
|
``default.html``.
|
|
|
|
|
|
|
|
Flatpage templates are passed a single context variable, ``flatpage``, which is
|
|
|
|
the flatpage object.
|
|
|
|
|
|
|
|
Here's a sample ``flatpages/default`` template::
|
|
|
|
|
|
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
|
|
|
|
"http://www.w3.org/TR/REC-html40/loose.dtd">
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<title>{{ flatpage.title }}</title>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
{{ flatpage.content }}
|
|
|
|
</body>
|
|
|
|
</html>
|