E-Scribe News : a programmer’s blog

About Me

PBX My name is Paul Bissex, and e-scribe.com is my consulting business. I build web applications using as much open source software as possible. From September to June I teach web design and other important non-photographic professional skills to photographers. In the '90s I wrote technology commentary and reviews for magazines, newspapers, and web publications, including Wired, Salon.com, FamilyPC, the late lamented Web Review, and the Chicago Tribune. Feel free to email me.

Book Project

I'm co-authoring a book, "Python Web Development with Django", with Jeff Forcier and Wesley Chun. It will be published by Prentice Hall in July 2008, but is available for pre-ordering on Amazon now.

Colophon

This site is built on a fresh trunk checkout of Django, running on Python 2.5.1, served by Apache and mod_python. The database is SQLite. The operating system is FreeBSD, on a VPS hosted at Johncompanies.com. Comment-spam protection by Akismet. Vintage topo imagery from the Maptech archive.

Pile o'Tags

Stuff I Use

Akismet, del.icio.us, Django, dpaste.com, Emacs, FreeBSD, Freenode, jQuery, LaunchBar, MacPorts, Markdown, Mercurial, OS X, Postfix, Python, SQLite, Subversion, TextMate, Trac, Ubuntu Linux, wmii

A Django site.
(Finally!)

Copyright 2008
by Paul Bissex
and E-Scribe New Media

Django: less (magic) is more

Today I updated my Django play/development environment to the new magic-removal branch, and migrated my proto-wiki as an exercise. Following the RemovingTheMagic instructions on the official Django wiki made it fairly easy. (I added some notes on dealing with custom template tags.)

This branch is about more than cleaning up some of the needlessly clever bits found in earlier implementations; it also has some really nice syntax refinements. Compare this:

reporters.get_list(fname__exact='John', order_by=('lname',))

to this:

Reporter.objects.filter(fname='John').order_by('lname')

No contest. I'm loving these refinements so much I almost don't want to get to 1.0!

Update: I did a count of the actual lines of Python in my little wiki project, not including settings.py and urls.py. Fifty-two -- and that's with the addition of a "delete" function, which I didn't have before.
The updated proto-wiki source is now available.

Sunday, February 12th, 2006
+
5 comments

Comment from Luke, later that day

The new syntax is rather nice. Have you discovered things like this:

(Reporter.objects.filter(fname='John') | Reporter.objects.filter(fname='Fred'))

? It does what you expect, and does it lazily (a single DB query). Sweet.

Comment from Andrew, later that day

As someone who is going to take another look at django because of this removing the magic, have you released the updated source to proto-wiki?

Comment from Paul, later that day

Andrew: I have now!

Luke: I hadn't seen that, thanks. A little verbose, but I definitely prefer it to the old double-underscore-delimited magic. Clearly I have some reading to catch up on.

Comment from Eric Moritz, 2 weeks later

This stuff is nice... I'm not looking forward to rewriting all my code though...

Comment from Tim, 10 months later

Thanks for sharing the code, I live the simplicity of Django/Python driven websites!

Post a comment

Comments use Markdown syntax. Your comment will not appear until approved, which may take a few hours or more. Spammers will be torpedoed.


(Will not be shared)

(Optional)