Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 2bcda839c7
Fetching contributors…

Cannot retrieve contributors at this time

204 lines (151 sloc) 12.168 kb
<!DOCTYPE html>
<html lang="en">
<title>Choosing a new python based blog engine</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="./theme/css/main.css" type="text/css" />
<link href="/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="pydanny Atom Feed" />
<!--[if IE]>
<script src=""></script><![endif]-->
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="./css/ie.css"/>
<script src="./js/IE8.js" type="text/javascript"></script><![endif]-->
<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="./css/ie6.css"/><![endif]-->
<body id="index" class="home">
<a href="">
<img style="position: absolute; top: 0; right: 0; border: 0;" src="" alt="Fork me on GitHub" />
<header id="banner" class="body">
<h1><a href=".">pydanny </a></h1>
<li><a href="./pages/about.html">About</a></li>
<li><a href="./pages/tools.html">Tools</a></li>
<li><a href="./pages/upcoming.html">Upcoming</a></li>
<li ><a href="./category/audrey.html">Audrey</a></li>
<li class="active"><a href="./category/blog.html">Blog</a></li>
<li ><a href="./category/django.html">Django</a></li>
<li ><a href="./category/python.html">Python</a></li>
</header><!-- /#banner -->
<section id="content" class="body">
<h1 class="entry-title">
<a href="choosing-a-new-python-based-blog-engine.html" rel="bookmark"
title="Permalink to Choosing a new python based blog engine">Choosing a new python based blog engine</a></h1>
<a href="" class="twitter-share-button" data-count="horizontal" data-via="pydanny">Tweet</a><script type="text/javascript" src=""></script>
<div class="entry-content">
<footer class="post-info">
<abbr class="published" title="2012-04-05T12:00:00">
Thu 05 April 2012
<address class="vcard author">
By <a class="url fn" href="./author/Daniel-Greenfeld.html">Daniel-Greenfeld</a>
<p>In <a href="./category/blog.html">blog</a>. </p>
<p>tags: <a href="./tag/python.html">python</a><a href="./tag/blog.html">blog</a></p>
</footer><!-- /.post-info -->
<div class="section" id="why-a-new-blog-engine">
<h2>Why a new blog engine?</h2>
<p>On my <a class="reference external" href="">old blog</a>, I had been having issues with Blogger for some time. The WYSIWYG text editor was annoying in that it produced wonky HTML, so I had to hand craft the posts. Which meant I often wrote the HTML formatted copy in a text editor and then copy/pasted it into the browser. A few times this blew up and I really wished I had version controlled back ups. Adding code examples was problematic, even with a stylesheet helpfully provided by Google. Finally, some of the changes to the blog engine itself were beginning to worry me, so I started looking for alternatives.</p>
<p>After my fiancee, Audrey Roy, converted her blog to <a class="reference external" href=""></a> at it's new location of <a class="reference external" href=""></a>, the static file hosting seemed so awesome I was impressed enough to <a class="reference external" href="">give Jekyll a try</a>. Why did Jekyll and static file hosting interest me so much?</p>
<div class="section" id="i-don-t-want-to-maintain-my-own-server">
<h3>I don't want to maintain my own server</h3>
<p>A couple times I rolled out a blog on a site I stood up, but didn't really feel like maintaining a site. I want someone else to do it. When I write, I want someone else to worry about the details. I want to focus on writing and nothing else.</p>
<p>Well... almost nothing else. You'll understand shortly.</p>
<div class="section" id="i-want-to-be-able-to-write-without-connection">
<h3>I want to be able to write without connection</h3>
<p>With blogger, I needed an internet connection to get my blog posts to format correctly. With Jekyll and other static file systems, I can just type away.</p>
<div class="section" id="i-want-to-publish-via-git">
<h3>I want to publish via git</h3>
<p>My <a class="reference external" href=""></a> has really exploded in my own usage and continued because it uses the same patterns I use in software development. I'm used to the pattern of using Git to push up content, so why use naked HTML? Sure, there are RST-to-HTML processors that I could use to generate that HTML, but they always require some amount of manual correction. Jekyll, and it's alternatives, let me just write.</p>
<div class="section" id="jekyll-wasn-t-for-me">
<h2>Jekyll wasn't for me</h2>
<p>I found Jekyll to be good and much more fun than Blogger, but not good enough. To sum up:</p>
<ul class="simple">
<li>I prefer RestructuredText over Markdown.</li>
<li>I don't know enough Ruby to easily customize things. I don't feel like diving into Ruby just to learn how to make modifications.</li>
<li>The template engine was like Smarty/Django/Jinja2, but not as much fun. Debugging errors was very problematic. Which was a problem when I started to play with modifying the theme.</li>
<p>On the second and third bullets, you might wonder why I would care about the underlying engine if all I wanted to do was write. Well, I'm well aware of the fact that I change opinions now and then. :-)</p>
<p>It was after trying out Jekyll that I started looking for <a class="reference external" href="">Python</a> based static file blog systems. The choices that seemed appropriate were:</p>
<div class="section" id="blogofile">
<h2><a class="reference external" href="">blogofile</a></h2>
<p>This is probably the most mature, most common Python static file generator around. It looks really awesome, and everyone who uses it swears by it. Alas, it's powered by <a class="reference external" href="">Mako</a> templates, which is... um... <a class="reference external" href="">not my friend</a> (apologies to <a class="reference external" href="">Mike Bayer</a>). What I really wanted was something with templates powered by <a class="reference external" href="">Jinja2</a>.</p>
<div class="section" id="hyde">
<h2><a class="reference external" href="">hyde</a></h2>
<p>Hyde claims to have started as Jekyll's evil Python twin. On the surface it looks awesome. Where it fails is documentation. There are lots of wonderful features that appear to exist, but follow the links to those features and you find yourself on placeholder pages.</p>
<p>In theory, I could have just looked at the hyde code and figured out stuff myself. Maybe even document out the holes.</p>
<p>In practice, all I want to do is write blog posts. It's one thing to customize things to suit your needs, it's another thing to make things work. Or document a tool. Color me lazy if you will, but when it comes to blogging, that's just how I am.</p>
<p>I think in the near future, once fully documented, Hyde is going to be AWESOME. For now? Well, I wanted another option.</p>
<div class="section" id="pelican">
<h2><a class="reference external" href="">pelican</a></h2>
<p>I was immediately hooked. Python powered engine with Jinja2 templates with <strong>complete documentation</strong>. In fact, every time I asked the author for help, he resignedly pointed me at the documentation. How cool is that?</p>
<p>At some point I'll use the <tt class="docutils literal">CSS</tt> setting to change the color of <tt class="docutils literal">pygments</tt> to something with white background and black text. For now I'm happy as things are now.</p>
<a class="reference external image-reference" href=";N05/6831339872/"><img alt="" class="align-center" id="pycon-cartwheel-with-glass" src="" /></a>
<p><a class="reference external" href="">Discuss this post on Hacker News</a></p>
</div><!-- /.entry-content -->
<div class="comments">
<h2>Comments !</h2>
<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_identifier = "choosing-a-new-python-based-blog-engine.html";
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
<section id="extras" class="body">
<div class="social">
<li><a href="/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="">twitter</a></li>
<li><a href="">github</a></li>
<li><a href="">facebook</a></li>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="">Pelican</a>, which takes great advantage of <a href="">Python</a>.
</address><!-- /#about -->
<p>The theme is by <a href="">Smashing Magazine</a>, thanks!</p>
</footer><!-- /#contentinfo -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "' type='text/javascript'%3E%3C/script%3E"));
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-18066389-3");
} catch(err) {}</script>
<script type="text/javascript">
var disqus_shortname = 'pydanny';
(function () {
var s = document.createElement('script'); s.async = true;
s.type = 'text/javascript';
s.src = 'http://' + disqus_shortname + '';
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
Jump to Line
Something went wrong with that request. Please try again.