My solution utilizes a class (navigation "model") and a minimal include (template within template) that defines the markup. It also makes it easy to use i18n. Instead of boring you further just have a look at the code and let me know what you think. I'm sure there's still some room for improvement. Perhaps this will inspire someone to write something truly superior, or not.
My views.py containing the navigation looks like this:
You'll need to inject an instance of that class to your template context like this: c = {'navi': Navi(request.path)}. You'll also need some template to render it out. Here's one way to do that (includes/navigation.html):
There we go! Now we should have a spiffy little navigation on our site. It's probably quite easy to extend the idea to support nested navigation and whatnot. That's up to you, though.
PS. If you read this via RSS, it's likely the code examples didn't show up. Surf to this post or check out this Gist for code examples.