Back in the Django saddle

Written by Adrian Holovaty on November 28, 2011

I've been a bad BDFL.

As a co-creator and one of the two Benevolent Dictators for Life of Django, my responsibility is to guide the open-source project forward. I did a great job of this for several years: from our open-sourcing in July 2005 (and for about two years prior to that), I was rather obsessed with it, contributing thousands of commits, answering thousands of support questions, participating in hundreds of design discussions, co-writing two editions of a book, writing week in review blog posts and evangelizing the framework at events. Making Django's code and community better is how I spent a significant chunk of my free time.

It grew wonderfully and brought me some of the proudest moments of my life, such as Google's launch of App Engine (with Django support built in!), a full-blown conference devoted to the framework and the consistently mind-blowing experience of being handed a book about Django written in a language other than English: Japanese! Chinese! Italian! Not to mention hearing about all of the incredible applications people around the world are building with the framework.

But then, in July 2007, EveryBlock happened. Running a startup took over my life, and even though EveryBlock is itself a rather complicated Django application, meaning I use the framework daily in non-trivial ways, my contributions to the framework itself basically stopped. And though I'm just one of more than a dozen core contributors, it's fair to say the project has suffered because of my absence. The development process got slower and too bureaucratic, contributors got frustrated by our lack of decision-making, and changes were made to the framework that I would've prevented had I been more involved.

I've felt horribly guilty about this for the past several years, and every few months I'd say to myself, "OK, I'm going to get back into Django development. For real this time." I'd fix a few bugs, make some documentation tweaks or whatever, but then I'd inevitably get distracted by my day job again.

But today, everything changes for the better. I'm excited to share the great news that Adrian's Lost Weekend is over. I've gotten the OK to spend a full workday a week on Django!

This is made possible by the growth at EveryBlock. I recently hired my own boss, after running the show for four years, and we've expanded our development team significantly. We do have some specific needs at EveryBlock that I'll be addressing in Django -- making speed improvements and fixing various pain points -- but I've made it clear that not everything I do on Weekly Django Day will be directly applicable to EveryBlock. Django, and my involvement therein, has yielded great dividends for EveryBlock, and it's time to formally give back.

The one-day-a-week regimen is exactly the kind of structure that will help me get back in the groove. I plan to work on these priorities, to start:

  • Release version 1.4.
  • Move to Git/GitHub. I want us to move from Subversion to Git, hosted on GitHub. Obviously, this is a large project with many repercussions, not the least of which is how our bug tracker and development process will change. We'll likely end up with some sort of hybrid system with our existing Trac installation, given how much we have invested in it. I predict some pain during this process, but it'll be worth doing for a whole bunch of reasons.
  • Reinstate "This Week in Django" blog posts. These were a great, concise way for Django users to stay updated with developments in the framework and community. I'm going to try to get these going again on the official Django blog.
  • Implement easy Pjax support. I have some design ideas on how we can easily add intelligent Pjax support to any Django app, with minimal code changes. I'm really excited about this one in particular.
  • Speed up template rendering. Armin has repeatedly talked about how much slower Django's template rendering is than Jinja's, and I want to cut out our inefficiencies to bridge the gap.
  • Fix transaction management. Not sure yet whether this only affects PostgreSQL, but I'm tired of the "idle in transaction" problem.
  • Fix the way .exclude() works. This one, described here, is getting in the weeds a bit, but it's an important thing to fix.

Look for more discussion on these issues on the django-developers mailing list. (My blog's comment section below is not the place to talk this stuff over. :-) )

I'm officially starting the one-day-a-week thing next week. It's good to be back. Let's get to work.


Posted by Dirty on November 28, 2011, at 9:02 p.m.:

Good news!

Question about pjax - isn't it doable using only js? What needs to be changed on server side?

Posted by Adrian Holovaty on November 28, 2011, at 9:23 p.m.:

Dirty -- yes, it'd be with JavaScript, via progressive enhancement. The server-side stuff would tell JavaScript what exactly to do. More on this later.

Posted by Dustin Davis on November 28, 2011, at 9:36 p.m.:

Nice. I like your bucket list!

Posted by Jeremy Dunck on November 28, 2011, at 9:38 p.m.:

I notice docs aren't on your list. I bet you don't make it a full day without fixing a doc typo. :-)

Posted by zalew on November 28, 2011, at 9:50 p.m.:

Hi Adrian, welcome back! Could you elaborate on "changes were made to the framework that I would've prevented had I been more involved"?

Posted by Peter Bengtsson on November 28, 2011, at 9:50 p.m.:

Music to my ears! ...or rather, my eyes.

Please consider putting a BDFL foot into the JSONField bug which clearly lacks fearless commitment and leadership.

Posted by Buddy Lindsey on November 28, 2011, at 10:14 p.m.:

I am just getting into Django over the last couple of months. It is good to hear some enthusiasm from the leaders of the project. I can't wait to where things go.

Posted by bobby on November 28, 2011, at 10:18 p.m.:

Why not bitbucket? Or HG?

Posted by Matthew Nuzum on November 28, 2011, at 10:21 p.m.:

PJax is cool, but good ol' fashioned ajax would be better. It'd be awesome to make it easier for class based views to expose their context without a template in either JSON or XML. I see a lot of projects breaking the DRY principle because Ajax is such a common use pattern that is not addressed by Django natively.

I know this is in progress, but it'd be really awesome to have solid support for migrations sooner rather than later. South works but I think life could be easier. Without migrations it's hard to be "agile" (in the literal sense of the word) because changing your mind about your models is such a chore.

I'm glad your back, glad you're excited to be working on this again and can't wait to see the fruit of your labor.

Posted by Alexis Bellido on November 28, 2011, at 10:24 p.m.:

Great news Adrian.

I'm excited about the move to git and the speeding up of template rendering; I'm sure many other good things are coming in 1.4.

I just left from a full time position to start working from scratch in my own open source project based on Django, and as I make progress I'll do my best to contribute back to the Django community.

Thank you very much for your great work and the inspiration!

Posted by Diederik on November 28, 2011, at 10:45 p.m.:

wow wow wow! Django on GitHub is great news.
if you only take into consideration what happened to Rails development speed after it mosted to GitHub, I can only smile for what's going to happen with Django.

Posted by We at WooMe fixed the idle in transaction problem ages ago on November 28, 2011, at 10:57 p.m.:

The bugfix has been in django since 1.2? It's simply a matter of mapping to transactions properly.

Posted by Grillermo on November 28, 2011, at 11:02 p.m.:

Thanks for this awesome news, i work for a startup and being able to tell my partners that such an importan part of our tech stack is here to stay makes me happy.

Posted by Daniel Greenfeld on November 28, 2011, at 11:27 p.m.:

This is great news! Yeah!

Posted by Scott W on November 28, 2011, at 11:57 p.m.:

Good news! I'd like to humbly ask for some looking into a way to fix contrib.auth.User. The rigidity in that + get_profile() is one of my least favorite things about django (I mostly love the rest of it :).

Posted by Michael Y. on November 29, 2011, at 12:11 a.m.:

Glad to hear, I love Django! I believe it's one of the most impressive open source projects in existence.

Posted by Paul Oswald on November 29, 2011, at 12:14 a.m.:

Great to see you're coming back to the team!

As someone who first came to django while you were away so to speak, please allow me to offer one piece of advice... Please either spend some time tending to the commenting facility on, improve it, or remove it and point new users to the django-users list and official documentation.

I understand that it is useful to collect comments about a book but the text is getting old and it pains me to see new users asking questions in the margins of that book and not getting feedback. The site is getting old but it still ranks quite highly on google. The text mentions that it is still being written but as far as I know it isn't. I think many newcomers get excited that they've found a great resource but they would probably be better served by the mailing list.

At least, that's how I felt when I was learning...

Anyway, excited to see what you've got up your sleeve.

Posted by David W on November 29, 2011, at 12:28 a.m.:

Claiming App Engine launched with Django is sort of like claiming Intel launched with the 80486 - it neatly omits the months of pain and suffering people discovered while using various hacks (painfully slow zip import comes immediately to mind) to get Django running on the original App Engine. AFAIK to this day Django's models aren't out of the box compatible with Datastore in any useful way.

On the other hand, it did launch with Django templates, which was a very useful addition to the original lineup (such a pity, though, that so many hoops must be jumped through to get this useful component running separately from the rest of the framework).

Congratulations nonetheless

Posted by Steven Hepting on November 29, 2011, at 12:40 a.m.:

Great news Adrian! It seems like a lot of work to fit into one day a week, but even that is still excellent.

Posted by qoda on November 29, 2011, at 5:44 a.m.:

Great news indeed, I've been using Django for 5 years and would like to say, Thank you!

Posted by David on November 29, 2011, at 5:50 a.m.:

The move to git is fantastic, without a BDFL simply impossible!

Posted by Joel Shapiro on November 29, 2011, at 6:14 a.m.:

Great news!

Thanks and good luck!

Posted by anonymous on November 29, 2011, at 6:51 a.m.:

Certainly seems like the project has gone stale. Glad to hear someone with motivation will be jumping back in. How about some movement towards compatibility with Python 3? (Now that it's been years and all...)

Posted by Paul on November 29, 2011, at 7:53 a.m.:

Welcome back, was worried! but you are a bad daddy, you abandoned your child :)

Posted by Derek on November 29, 2011, at 8:20 a.m.:

Re: "Please either spend some time tending to the commenting facility on, improve it, or remove it and point new users to the django-users list and official documentation."

I'd like to +1 this ... I learnt Django from, and I'd love to see it upgraded to the latest version (perhaps 1.4?) - but if you are not able/willing to do that, please just remove it and redirect users elsewhere. Its not very pleasant to see something so useful wither away bit-by-bit.

Posted by Batisite on November 29, 2011, at 9:48 a.m.:

Hi, good news,

The template performance is definitively an important issue because it can make the integration of projects using different template engine difficult or impossible.

Posted by Atte on November 29, 2011, at 11:16 a.m.:

While you are looking at Jinja, you should consider taking Django templating more that way, especially with macros.

Another thing that has bugged me for quite a while is the lack of a good and simple enough default file and directory layout for Django projects. Semantically, do apps belong to the project or what?

Posted by amd on November 29, 2011, at 2:04 p.m.:

Fix transaction management. Not sure yet whether this only affects PostgreSQL, but I'm tired of the "idle in transaction" problem.

At least in some cases this is just changing the psycopg2 to autocommit which isn't the default.

Posted by BrettH on November 29, 2011, at 10:35 p.m.:

You might want to consider Assembla Public Portfolio's for Django which would give you better than Trac ticketing and choice of svn/git/hg + wiki etc. Critically they have a RESTful api for export/import tickets, trac to assembla import, and static pages. Up until 6 months ago I hated their interface but it's really shaping up nicely now.

Posted by Michael Trier on November 30, 2011, at 12:18 a.m.:

Excellent news. I love your priorities. Good luck with it all!

Posted by Thomas G├╝ttler on November 30, 2011, at 3:24 p.m.:

Great news! Good luck!

Posted by Joe Tennies on November 30, 2011, at 7:20 p.m.:

Isn't the pjax stuff basically Dajax ( You may argue the implementation, but I love the part where all the ajax is implemented cross-library so it supports Prototype, jquery, mootools, and dojo. To me the Dajaxice (or something like it) is the missing part from Django.

Posted by Jeff Bauer on December 1, 2011, at 3:46 a.m.:

One thing I wish I'd seen on your BDFL list ... Migration towards Python 3.x. Any thoughts?

Posted by Joe Tennies on December 2, 2011, at 6:13 a.m.:

Jeff, if you've been listening to the django-dev mailing list. Python 3.x support is almost assuredly not going to land in 1.4, but there is discussion about potentially a preview release in 1.5. There's a couple tests failing (literally a couple) and most DB backends that are going to need to be tested (all but SQLITE), but it's sounding like it's getting very close.

Posted by Markus Gattol on December 4, 2011, at 4:52 a.m.:

The current progress on Python 3 is great. Another thing that's on the radar for so long and which is actually ready for 1.4 is NoSQL support:

- (migration currently in progress)

Posted by Marshall on December 5, 2011, at 5:32 p.m.:

It's good to see that there may be more Django activity soon. As someone very interested in Django and wanting to learn it's been difficult as most of the information that I come across (blog posts, tutorials, whatever) seems to be from 2007... I may be looking in all the wrong places, but a lot of what I've run into on the web doesn't tell me that the framework has a very active community behind it currently. REALLY looking forward to seeing where things go. Oh, and I hope that doesn't come off as offensive to anyone.

Posted by Joe Tennies on December 7, 2011, at 5:27 a.m.:

Okay. We are looking like we may have all tests passing under both SQLite and psycopg2! There's someone working on MySQL right now, but I think the driver is what is behind. Ditto for Oracle! I must admit that this is hugely exciting.

I believe the new thing being worked on is the stuff that required PIL. I may come back and make a run at the caching layers as I know I haven't tested them.

The big thing I see missing is a good "porting guide" to help people port their apps to Python 3, and the big thing needed for that is brave souls to try it and document their pain!

Comments have been turned off for this page.