Removed the long_name field from the Country model, and renamed the short_name field to name. (These were only needed when using the Google Maps reverse geocoder.) The Flickr importer will also now check the second page of photos to make sure it has all the newly-uploaded photos (well, up to the latest 200).
Changed the CommentFormForCaching class so it properly bypasses Django's security form fields. The caching I have on the site means I can't use the time-based security Django uses by default.
Added a photos app. This allows for geocoded photos to be categorised into collections, and to have metadata such as camera used, people appearing in the photo, and some EXIF data. There's also a Django management command to import photos from Flickr.
By using StaticGenerator the blog's comment form was being cached, which meant that after two hours the comment form was raising a 400 error. I've created my own form that dispenses with the timestamp and security hash to get around this problem.
Removed all the instances of relative dates as now the site's heavily cached they'll be out-of-date as soon as they're cached. Thanks to Brian Suda for noticing them.
Removing the tes to see if the current user is an administrator, as if the cache is created on their request the Google Analytics code will be missing.
Updated the blog post-save/delete signal so the next and previous entry caches are deleted too (those pages contain links to the blog entry that's changed, so the cache could well be out-of-date).