<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5702132678499870328</id><updated>2012-04-27T10:06:04.992+10:00</updated><category term='Home Theatre'/><category term='applescript'/><category term='google app engine'/><category term='ebooks'/><category term='python'/><category term='food'/><category term='books'/><category term='vmware'/><category term='apple'/><category term='zope'/><category term='Australian politics'/><category term='deployment'/><category term='os x'/><category term='ubuntu'/><category term='testing'/><category term='django'/><category term='parallel imports'/><title type='text'>Hedged down</title><subtitle type='html'>Leave breadcrumbs to find my way back.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/-/django'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/search/label/django'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-3847610512766473781</id><published>2010-11-08T03:27:00.002+11:00</published><updated>2010-11-09T20:12:09.077+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Taming the Komodo dragon for virtualenv and python</title><summary type='text'>My first python editor on osx was textmate. Like many others I love it's simplicity, bundles, and the fact that it actually feels like an osx app and not some OS bastard love child, but after a while I found I really wanted seamless autocomplete and calltips which I'd always had on Windows. Every year I look in vain at the macromates site for textmate 2, and every year I become increasingly </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/3847610512766473781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=3847610512766473781' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/3847610512766473781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/3847610512766473781'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2010/11/taming-komodo-dragon-for-virtualenv-and.html' title='Taming the Komodo dragon for virtualenv and python'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3p3mYq1V1Yg/TNav9T7z0BI/AAAAAAAAAC8/_VCzMx6FEos/s72-c/Screen+shot+2010-11-08+at+12.55.27+AM.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-3953697144791831863</id><published>2010-06-23T11:56:00.002+10:00</published><updated>2010-06-23T16:21:40.232+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Deploying Django</title><summary type='text'>It's been a while between posts, and also between Django projects, but coincidentally with the release of 1.2 I've found an excuse to work with Django again, and have decided to release my own Django deployment library based on fabric called woven. More on that in a minute.

Deployment of Django projects has always been a bit harder than it should be. I understand why Django hasn't gone down the </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/3953697144791831863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=3953697144791831863' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/3953697144791831863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/3953697144791831863'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2010/06/deploying-django-with-woven.html' title='Deploying Django'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-5204078243214101963</id><published>2009-09-08T19:59:00.000+10:00</published><updated>2009-09-08T19:59:04.486+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='google app engine'/><title type='text'>Django and Google App Engine</title><summary type='text'>Reading Jacob Kaplan-Moss's post Snakes on the Web my first thought was - why hasn't he mentioned Google App Engine? To be fair to Jacob, the GAE sdk when launched was pretty underwhelming but GAE is the ugly duckling that could very well grow into a swan. If Django is for 'perfectionists with deadlines' then GAE might be said to be for 'perfectionists with aspirations'.

The growth of Django </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/5204078243214101963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=5204078243214101963' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/5204078243214101963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/5204078243214101963'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2009/09/django-and-google-app-engine.html' title='Django and Google App Engine'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-6905128685905521835</id><published>2009-07-29T18:56:00.009+10:00</published><updated>2009-07-30T22:33:19.811+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><title type='text'>Django development workflow</title><summary type='text'>Speak to 10 different Django developers and you will find 10 different ways of working. Speak to them the following year and you will no doubt find another 10 evolutions. This is just one of them, pickled in the moment.  I have a longish history with python but my Django experience is much more recent, but nonetheless I think this distills a some sound practices that I've learned from others, and</summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/6905128685905521835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=6905128685905521835' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/6905128685905521835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/6905128685905521835'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2009/07/django-development-workflow.html' title='Django development workflow'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-9101276062475943653</id><published>2008-09-22T13:05:00.007+10:00</published><updated>2008-09-22T13:12:31.382+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>10. Finishing the Code-Sharing Application</title><summary type='text'>This is part 10 of a series of posts on James Bennett's excellent Practical Django Projects. The table of contents and explanation can be found here

Finally, we're on the home stretch. This chapter builds on our knowledge of templates and also gives a few new examples of custom template tags, so without further ado lets finish the app.

On p188 you need to modify the save method of the bookmark </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/9101276062475943653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=9101276062475943653' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/9101276062475943653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/9101276062475943653'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2008/09/10-finishing-code-sharing-application.html' title='10. Finishing the Code-Sharing Application'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-6696527504320583958</id><published>2008-09-22T11:19:00.001+10:00</published><updated>2008-09-22T11:26:30.118+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>9. Form Processing in the Code-Sharing Application</title><summary type='text'>This is part 9 of a series of posts on James Bennett's excellent Practical Django Projects. The table of contents and explanation can be found here

The chapter is the first serious coverage of forms. As Django 1.x has been released there is no old and newforms just forms, so on p171 and p176 and wherever else from django import newforms as forms is used, just use from django import forms.
There </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/6696527504320583958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=6696527504320583958' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/6696527504320583958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/6696527504320583958'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2008/09/9-form-processing-in-codesharing.html' title='9. Form Processing in the Code-Sharing Application'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-8148773982959530603</id><published>2008-09-19T14:31:00.017+10:00</published><updated>2008-09-20T17:42:11.991+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='zope'/><title type='text'>Mark Ramm: Django and learning from Zope 2</title><summary type='text'>Mark Ramm gave an interesting talk (now up on youtube) at DjangoCon about learning from the experiences of Zope 2. As someone who hit the Z productivity wall after developing a site with Zope 2 I really appreciated what he had to say but disagree with the reasons for the decline of Zope 2 and what it means for Django. The first part of the talk he summarizes as:"basically an argument that </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/8148773982959530603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=8148773982959530603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/8148773982959530603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/8148773982959530603'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2008/09/mark-ramm-django-and-learning-from-zope.html' title='Mark Ramm: Django and learning from Zope 2'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-8904903634814455455</id><published>2008-09-15T22:44:00.003+10:00</published><updated>2008-09-15T22:52:12.625+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>8. A Social Code-Sharing Site</title><summary type='text'>This is part 8 of a series of posts on James Bennett's excellent Practical Django Projects. The table of contents and explanation can be found here
Building and testing the models for the snippets app is fairly straightforward. The only changes you need to make are to separate out your admin classes into the separate admin.py file which I've shown previously, so type up all the code up to p154 </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/8904903634814455455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=8904903634814455455' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/8904903634814455455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/8904903634814455455'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2008/09/8-social-code-sharing-site.html' title='8. A Social Code-Sharing Site'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-1353600596875120017</id><published>2008-09-15T12:49:00.023+10:00</published><updated>2009-02-06T12:13:52.304+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>7. Finishing the Weblog</title><summary type='text'>This is part 7 of a series of posts on James Bennett's excellent Practical Django Projects. The table of contents and explanation can be found here

Firstly, the comments framework has been re-written for 1.0. The documentation for it can be found here if you need to refer to it. That out of the way lets get into the meat of the chapter.

There is now only one model for comments instead of two </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/1353600596875120017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=1353600596875120017' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/1353600596875120017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/1353600596875120017'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2008/09/7-finishing-weblog.html' title='7. Finishing the Weblog'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-185587396069640584</id><published>2008-09-06T18:17:00.005+10:00</published><updated>2008-09-06T18:23:41.724+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>6. Templates for the Weblog</title><summary type='text'>Writing the Link Model
This is part 6 of a series of posts on James Bennett's excellent Practical Django Projects. The table of contents and explanation can be found here.
Read through and implement the all the templates up to p111 where the book covers Custom Tags. If you try running your base site at http://localhost:8000/weblog/ you'll probably get some template errors so we need to go back </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/185587396069640584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=185587396069640584' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/185587396069640584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/185587396069640584'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2008/09/6-templates-for-weblog.html' title='6. Templates for the Weblog'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-9093062340802217666</id><published>2008-08-29T03:05:00.013+10:00</published><updated>2008-09-15T10:08:18.165+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>4. A Django-Powered Weblog</title><summary type='text'>



Creating the Weblog Application
This is part 4 of a series of posts on James Bennett's excellent Practical Django Projects. The table of contents and explanation can be found here.
Before we start going through the Weblog app, you may want to have a look at my post on Django tests. This will help sort out any basic errors you make typing up examples.

In this section of the book James gives </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/9093062340802217666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=9093062340802217666' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/9093062340802217666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/9093062340802217666'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2008/08/4-django-powered-weblog.html' title='4. A Django-Powered Weblog'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-3736400994261825012</id><published>2008-08-27T13:27:00.020+10:00</published><updated>2008-08-29T03:53:03.502+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><title type='text'>Django testing for absolute beginners</title><summary type='text'>I want to interrupt my series of posts on Practical Django Projects and quickly show how to setup the most basic of tests, and hopefully convince you why taking some small steps and starting with one line of test code can save your sanity especially if you're tracking a code breaking trunk. First the why..

In my previous post I wrote about getting an error in the browser:

ImproperlyConfigured </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/3736400994261825012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=3736400994261825012' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/3736400994261825012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/3736400994261825012'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2008/08/django-testing-for-absolute-beginners.html' title='Django testing for absolute beginners'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-1308987802406720819</id><published>2008-08-25T13:57:00.022+10:00</published><updated>2008-08-27T18:24:04.264+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>3. Customizing the Simple CMS</title><summary type='text'>This is part 3 of a series of posts on James Bennett's excellent Practical Django Projects. The table of contents and explanation can be found here.



Improving the Search Function with Keywords
On page 34 when defining your first model class, remove the Admin class to replace it with new a separate newforms admin file (hereafter just admin). If I've ignored code that works just fine I just use </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/1308987802406720819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=1308987802406720819' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/1308987802406720819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/1308987802406720819'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2008/08/3-customizing-simple-cms.html' title='3. Customizing the Simple CMS'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-8059324035276089271</id><published>2008-08-25T09:35:00.004+10:00</published><updated>2008-08-25T23:15:36.535+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>1. Welcome to Django</title><summary type='text'>This is part 1 of a series of posts on James Bennett's excellent Practical Django Projects. The main post can be found here. This is not a critique of James's book, but rather a collection of notes and code revisions to accompany it, both updating it for Django 1.x and things beginners may want to consider. The headings follow the subheadings in the book.

Say Hello to Python
If you haven't </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/8059324035276089271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=8059324035276089271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/8059324035276089271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/8059324035276089271'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2008/08/1-welcome-to-django-notes-on-pdp.html' title='1. Welcome to Django'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5702132678499870328.post-2731554177633922016</id><published>2008-08-25T09:30:00.025+10:00</published><updated>2009-06-24T14:34:57.723+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Practical Django Projects</title><summary type='text'>

June 2009 News Update: The second edition of this book has been released!
The 2nd edition of Practical Django Projects has been released  making this series of posts redundant! 


Notes and a practical companion
I've been reading James Bennett's excellent Practical Django Projects (PDP), which uncritically I think is the best python based book I've read since I picked up Mark Lutz's Learning </summary><link rel='replies' type='application/atom+xml' href='http://blog.haydon.id.au/feeds/2731554177633922016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5702132678499870328&amp;postID=2731554177633922016' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/2731554177633922016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5702132678499870328/posts/default/2731554177633922016'/><link rel='alternate' type='text/html' href='http://blog.haydon.id.au/2008/08/notes-on-practical-django-projects.html' title='Practical Django Projects'/><author><name>Brett Haydon</name><uri>https://profiles.google.com/105191829019430069858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-suMun9RAo5c/AAAAAAAAAAI/AAAAAAAAAEw/G7tqPpOe9y0/s512-c/photo.jpg'/></author><thr:total>16</thr:total></entry></feed>