My customized blog app for GAE
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 171 commits ahead, 1 commit behind DocSavage:master.


Python Blog for Google App Engine, heavily tweaked from Bill Katz’ Bloog


Once you’ve checked out the code, initialize the external git modules, and
download some other external dependencies like so:

 $ git submodule init
 $ dev/
 $ dev/

Minified Resources

My fork of Bloog uses minified JS and CSS resources when hosted online, but un-
minified versions when run locally. This allows you to make quick changes
during development (and get accurate line numbers when debugging) while still
serving content as quickly as possible to your visitors. However, this means
if you make changes to JS or CSS files, you must run dev/ before
uploading your application via update.

Locally Hosted Resources during Development

Sometimes I’m offline when doing development so YUI resources are served locally
during development (i.e. when debug mode is turned on), but those files are
served from Yahoo’s CDN when the app is hosted live. Run dev/
which will download the YUI dependencies to the static/hosted folder. These
files are not uploaded to the AppEngine servers, since they are not used when
the app is live.

Picasa Image Store

There are two modes for uploading images to your blog – local image storage, and
hosting from Picasa. If you want to host your images on Picasa (to save on data
API costs) you need to also download the gdata API and supporting libraries.
To download these dependencies, run dev/ from your bloog
base directory. The script will download and extract the necessary files into
your bloog project.

Next, you need to determine what album you want to upload images to. Picasa can
automatically use an album named ‘default.’ However, if you want to use some
other Picasa album that you’ve created, you need to determine that album’s ID.
Edit and run dev/scripts/ (inserting your user name and
the name of the album you’ve created). The script will spit out that album’s
ID, and also list the photos already present in that album (as a sanity check to
make sure that album is publicly accessible). Then take that album ID number
and put it in the picasa_auth section of

Deploying to AppEngine

Change the application name in app.yaml, and upload your app. If you happened
to modify any of the javascript or CSS resources, minify them first:

 $ dev/
 $ update .

For more information on AppEngine, see the Getting Started documentation .


Quick list of changes I’ve made from Katz’ original code:

  • Recaptcha integration for comments
  • Picasa image upload
  • Local image upload and hosting
  • Improved memcache lookup to reduce datastore access
  • Google Analytics support
  • Use minified JS and CSS resources in hosted mode
  • Summary and full-content Atom feeds
  • Added Tag cloud
  • Admin may delete comments from article view
  • Editor tweaks:
    • View/edit raw HTML in posts
    • Inline code tag as well as <pre> blocks
    • Admin’s name and email are inserted by default for comment replies
    • Comment subject defaults to “Re: <parent subject>”
    • Configurable post date & legacy ID if manually uploading old posts.
  • Blogger legacy URL mapping support
  • Commenter names link to their homepage
  • Upgrated Syntaxhighlighter to hosted version
  • Configurable YUI version

Final Notes

The image upload feature uses an icon from FamFamFam’s Silk icon set.