Week(s) in review: June 26
Here are the highlights of Django improvements over the past couple of weeks. Lots of great stuff in here...
- Changeset 3087: Made template names in django.contrib.auth.views passable as template_name argument to the view.
- Changeset 3091: Added language bidirectional support and updated the admin to use it. The new LANGUAGE_BIDI setting specifies whether a language is right-to-left or left-to-right. Very cool.
- Changeset 3092: Added a new Manager method, get_or_create(). It does what it says: It tries to look up an object with given parameters, and if it doesn't find one, it creates one. See the docs.
- Changeset 3094: Made the 'choices' parameter accept any iterable.
- Changeset 3108: Added support for "and" in template "if" tags. This is something we'd always put off, saying you could just nest "if" statements, but it's a lot nicer to be able to use "and". Example: {% if foo and bar %}. Thanks, ckknight.
- Changeset 3109: Solved the POST-data-lost-after-redirect problem by raising RuntimeError when DEBUG=True in the CommonMiddleware. Have you ever been bitten by POSTing to a form without a trailing slash, and losing POST data? Be bitten no longer.
- Changeset 3123: File uploads within the update_object generic view now work. Thanks, parlar.
- Changeset 3136: Added AllValuesFilterSpec to admin changelist filters, which lets you put any arbitrary field in the "list_filter" option in your "class Admin". For instance, say you have a CharField called "first_name". If you put "first_name" in "list_filter", Django will pull out all available values for that field (doing a SELECT DISTINCT behind the scenes).
- Changeset 3138: Added 'openbrace' and 'closebrace' options to the {% templatetag %} tag.
- Changeset 3144: Added HttpResponseNotAllowed, which returns an HTTP status code 405. You pass it a list of permitted methods.
- Changeset 3145: Models can now be initialized using settable properties. See _set_full_name() in the properties model examples for an example.
- Changeset 3164: Added a "method" attribute to HttpRequest objects. This is a nicer way of accessing request.META['REQUEST_METHOD'].upper().
- Changeset 3165: The template system now accepts generators in "for" loops. Thanks, dbm-django@mclachlan.com.au.
- Changeset 3166: Improved HttpResponseRedirect and HttpResponsePermanentRedirect to percent-encode non-ASCII characters in the Location header. Thanks, Andrey.
- Changeset 3174: Added manage.py "runfcgi" option, along with the new FastCGI documentation. Thanks, jcrasta@gmail.com and others.
- Changeset 3185: Added an optional comparison argument to the "timesince" template filter. Also added a "timeuntil" filter that works the same way. Thanks, john@sneeu.com.
- Changeset 3134: Added generic foreign-key support. This excellent feature lets you relate an object to "any" object, through content-type and ID fields. A trendy example: Tagging. See the example models for use.
In other Django news:
- Congrats to news.samba.org, which has gone Django. Read the announcement.
- Ian Holsman beta-released a Django jobs site called Gypsy Jobs.
- We're getting a reputation as a Web-designer-friendly framework. The latest designer to join in the fun: D. Keith Robinson.
- A fellow named William published some mindblowing Django stress tests. 209 requests per second!
- Malcolm Tredinnick wrote a nice tutorial on using custom SQL in Django.
- Luke Plant launched CCIW on Django and has a detailed explanation, including source code.
- Not only is this OS X Django walkthrough useful -- it has a really nice Python/Django drawing of a snake.
- Jeremy Jones over at O'Reilly had some nice things to say about Django's RSS support. "I can't imagine this being easier."
- "I have discovered an answer to all my problems...Django. ... I guess I will be removing Ruby from my Dapper laptop."
- Here's some code for a Django admin interface for a blog in 5 minutes.