Title:
django_yaba, aka, django-yet-another-blog-application

Dependencies:
    Django-tagging
    Python-Feedparser
    Python-Twitter
    UrlLib and UrlLib2
    PIL 
    PyMySQL
    setuptools
    cronolog
    mod_wsgi
    django-disqus

Demonstration:
You can see the blog in action at http://www.f4ntasmic.com. That version is a bit customized to my exact needs, but it's basically what you'll get when you use this applicaiton.

I know, we didn't have enough blog engines built with Django right? Hell, finding a name for this one was a PITA thanks to all the others ones that exists. Hence, YABA it is. If anyone else already has this, and I just missed it, let me know, and I'll change the name of this one. 

Purpose:
I tend to blog a bit (http://www.f4ntasmic.com), and have built my own blog previously using Django. I wanted something a bit more flexible though, so I decided to build it with the idea of being able to plug it anywhere with minimal configuration. I'm going to leverage YAML (http://www.yaml.de/en/) for the theme of the blog, so that you can have a fairly pretty blog out of the box within minutes. Anyways, let me know if you have any questions.

Features:

Dynamic Themes:
   There are two "themes" (one is just an ugly hack of the default, intended for test purposes not for actual use) now usable via the Admin UI. The default site configuration is loading from a fixture on initial syncdb, which sets up the initial themes. Obviously that means it's possible to create a theme, put it in the appropriate theme folder, and then create a theme in the Admin panel. You just have to name it the same as your directory in the themes path. Obviously, following my directory structure in the themes will lead to best results.

WYSIWG Editor:
   Using TinyMCE
   Works

Blog Posts:
   Will allow previews for authenticated users eventually. Backburner.

RSS Feed:
   They appear to work properly now.. Doesn't work in staging, but it does work on www.f4ntasmic.com for some reason. Same code, different results. I'd try to wrap my head around it, but I fear I'd only hate myself for it.

BlogRoll:
   Quite functional. One would hope right? They're flipping links.

Articles:
    The articles are items that won't show up in the traditional main news feed. Also, if you check the "Buttoned" box, then the article will have a link to it on the top main nav bar. Currently functional

Comments:
    Currently in place and work. Also leveraging ReCAPTCHA as well to prevent spammers. UPDATE 07/19: Switched to disqus for comments. Trying them out for awhile.
    If all goes well, I'll nuke out the recaptcha stuff.

Social Media:
    Currently can grab your latest tweets, GitHub commits, and builds links to submit stories to Digg, Reddit, Delicious, and StumbleUpon. Github/Twitter configurable via simple settings in settings.py. If you don't want to display your tweets or github commits, just leave those fields empty in settings.py. If those are blank, you'll never see them again. 

Search:
    You can now search for stories based on title/body contents. It's not super advanced, but it's functional.

Galleries:
    You can now add new photo galleries to your site. I've placed a link to the gallery list on the top nav bar for easy browsing of galleries as well. It auto creates thumbnails and links to the full size of the image as well. So far works pretty well, but isn't extensively tested at this time.

Installation Instruction:
    After you grab the package from GitHub or f4ntasmic.com, you can find an install directory at django-yaba/install. In there is an install script that will walk through the installation for you. This currently only works on CentOS based hosts at this time. It's also only confirmed to work in CentOS 5, your milage may vary with other hosts. The manual install works with all current Linux distributions.

    Scripted install:
       cd django-yaba/install
       ./install.sh
       Then just follow the prompts, it'll install all dependencies for you.

    Manual install, see below: 

    1. Grab the current HEAD from GitHub
    2. Unpack it to a directory. For example I use the following:
           /var/www/domains/f4ntasmic.com/www/django_yaba

       You'll also want to either copy, or rsync the admin media to django_yaba/adminmedia.
 
    3. Then you need to edit the following in settings.py in order for this to work properly:
           GITHUB_USERNAME - can be left blank, and that'll remove that feed from the sidebar
           TWITTER_USERNAME - can also be blank as above
           TWITTER_PASSWORD - if you want to enable auto-tweeting blog/article posts
           ROOT_BLOG_URL - Needed for certain items to work properly, mine is "http://www.f4ntasmic.com/"
           DISQUS_API_KEY - Needed for Disqus comments
           DISQUS_WEBSITE_SHORTNAME - Needed for Disqus Comments

           You'll also need to fill out your database information as necessary.

    4. If you don't already have it, you'll need to install django-tagging's latest public release (yaba is not based on the SVN head or anything crazy). The tagging system for posts relies on that.
    5. Now onto the virtual host with Apache. You have two choices, mod_python (not recommended at all) or mod_wsgi. If you're using CentOS and worried about building WSGI from source, don't fret. There's an RPM in EPEL (google EPEL, you'll find the promised land). It takes 2 seconds to install, promise. So here are your options:

           mod_wsgi:
                You'll need to add something similar to the following to your vhost:
                          Alias /media /home/f4nt/git-repos/personal/django_yaba/media
                          Alias /adminmedia /home/f4nt/git-repos/personal/django_yaba/adminmedia
                          WSGIScriptAlias / /home/f4nt/git-repos/personal/django_yaba/yaba.wsgi

               It's up to you to some degree on working out the directory statements to make those Aliases for media/adminmedia valid.

          mod_python:
               Now for the ugly:

                   <Location "/"
                       SetHandler python-program
                       PythonPath "['/var/www/domains/f4ntasmic.com/www/']+sys.path"
                       PythonHandler django.core.handlers.modpython
                       SetEnv DJANGO_SETTINGS_MODULE django_yaba.settings
                       SetEnv PYTHON_EGG_CACHE '/var/www/domains/f4ntasmic.com/www/django_yaba/cache/'
                       PythonDebug On
                   </Location>

                   <LocationMatch "/(images|media|adminmedia|downloads)">
                       SetHandler none
                   </LocationMatch>

                
         You will want to ensure that whatever is running Apache has access to django_yaba/cache no matter which way you roll it. 
