Getting started


Before you begin, you should have a Django project created and configured.

In­stall our library from PyPI, like so:

$ pip install django-bakery

Edit your and add the app to your INSTALLED_APPS list.

    # ...
    # other apps would be above this of course
    # ...


Also in, add a build directory where the site will be built as flat files. This is where bakery will create the static version of your website that can be hosted elsewhere.

BUILD_DIR = '/home/you/code/your-site/build/'

The trickiest step is to re­fact­or your views to in­her­it our buildable class-based views. They are similar to Django’s generic class-based views, except extended to know how to auto­mat­ic­ally build them­selves as flat files.

Here is a list view and a de­tail view us­ing our sys­tem.

from yourapp.mod­els im­port Dummy­Mod­el
from bakery.views im­port Build­able­De­tailView, Build­ableL­istView

class DummyL­istView(Build­ableL­istView):
    Generates a page that will feature a list linking to detail pages about
    each object in the queryset.
    queryset = Dummy­Mod­

class DummyDe­tailView(Build­able­De­tailView):
    Generates a separate HTML page for each object in the queryset.
    queryset = Dummy­Mod­

If you’ve never seen class-based views before, you should study up in the Django docs because we aren’t going to rewrite their documentation here.

If you’ve already seen class-based views and decided you dislike them, you’re not alone but you’ll have to take our word that they’re worth the trouble in this case. You’ll see why soon enough.

After you’ve con­ver­ted your views, add them to a list in where all build­able views should be recorded as in the BAKERY_VIEWS variable.



Then run the man­age­ment com­mand that will bake them out.

$ python build

This will create a copy of every page that your views support in the BUILD_DIR. You can re­view its work by fir­ing up the buildserver, which will loc­ally host your flat files in the same way the Django’s runserver hosts your dynamic data­base-driv­en pages.

$ python buildserver

To pub­lish the site on Amazon S3, all that’s ne­ces­sary yet is to cre­ate a “buck­et” inside Amazon’s service. You can go to to set up an ac­count. If you need some ba­sic in­struc­tions you can find them here. Then set your buck­et name in

AWS_BUCK­ET_­NAME = 'your-buck­et'

While you’re in there, you also need to set your credentials.

AWS_ACCESS_KEY_ID = 'your-key'
AWS_SECRET_ACCESS_KEY = 'your-secret-key'

Fi­nally, now that everything is set up, pub­lish­ing your files to S3 is as simple as:

$ python publish

You should be able to visit your bucket’s live URLs and see the site in action. To make your bucket act more like a normal website or connect it to a domain you control follow these instructions.


If you are publishing to S3, you can reduce the size of HTML, JavaScript and CSS files by having bakery compress them using gzip as they are uploaded. Read more about this feature here, here or here.

Getting started is as simple as returning to and adding the following:


Then rebuilding and publishing your files.

$ python build
$ python publish