<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DjangoPro</title>
	<atom:link href="http://www.djangopro.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.djangopro.com</link>
	<description>Expert Django Advice</description>
	<lastBuildDate>Wed, 14 Sep 2011 14:18:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Reference Django Admin Site URLs Symbolically</title>
		<link>http://www.djangopro.com/2011/09/reference-django-admin-site-urls-symbolically/</link>
		<comments>http://www.djangopro.com/2011/09/reference-django-admin-site-urls-symbolically/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 14:18:28 +0000</pubDate>
		<dc:creator>PK Shiu</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[QuickTips]]></category>
		<category><![CDATA[admin site]]></category>

		<guid isPermaLink="false">http://www.djangopro.com/?p=94</guid>
		<description><![CDATA[Sometimes We want to expose part of  the Django admin site to the user. Django provides a way to build those admin site page URLs symbolically using the built in URL reversing system, using the reverse function. This feature is well documented, but sometimes hard to find. The correct url is here, on reversing admin [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.djangopro.com/wp-content/uploads/2011/09/django_admin.png"><img class="alignright size-medium wp-image-97" title="django_admin" src="http://www.djangopro.com/wp-content/uploads/2011/09/django_admin-300x189.png" alt="" width="300" height="189" /></a>Sometimes We want to expose part of  the Django admin site to the user. Django provides a way to build those admin site page URLs symbolically using the built in <a href="https://docs.djangoproject.com/en/1.3/topics/http/urls/#naming-url-patterns" target="_blank">URL reversing system</a>, using the <strong>reverse</strong> function. This feature is well documented, but sometimes hard to find. The correct url is here, on <a href="https://docs.djangoproject.com/en/1.3/ref/contrib/admin/#reversing-admin-urls" target="_blank">reversing admin URLs</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djangopro.com/2011/09/reference-django-admin-site-urls-symbolically/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mkvirtualenv problem on Mac OS X Lion?</title>
		<link>http://www.djangopro.com/2011/08/mkvirtualenv-problem-on-mac-os-x-lion/</link>
		<comments>http://www.djangopro.com/2011/08/mkvirtualenv-problem-on-mac-os-x-lion/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 16:53:42 +0000</pubDate>
		<dc:creator>PK Shiu</dc:creator>
				<category><![CDATA[Configuration]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.djangopro.com/?p=88</guid>
		<description><![CDATA[I finally get around to setting up a django development environment on my MacBook Pro running Lion. I immediately run ino the error &#8220;Could not call install_name_tool&#8221; error when I try to run mkvirtualenv The solution is very simple (and silly). We always remember to install XCode before setting things up. But by downloading and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.djangopro.com/wp-content/uploads/2011/08/Xcode_icon.png"><img class="alignright size-medium wp-image-91" title="Xcode_icon" src="http://www.djangopro.com/wp-content/uploads/2011/08/Xcode_icon-300x300.png" alt="" width="300" height="300" /></a>I finally get around to setting up a django development environment on my MacBook Pro running Lion. I immediately run ino the error &#8220;Could not call install_name_tool&#8221; error when I try to run mkvirtualenv</p>
<p>The solution is very simple (and silly). We always remember to install XCode before setting things up. But by downloading and &#8220;installing&#8221; XCode from the AppStore only download and install the XCode Installer. You have to run the downloaded installer to get XCode install.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djangopro.com/2011/08/mkvirtualenv-problem-on-mac-os-x-lion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Should I Upgrade to Django 1.3?</title>
		<link>http://www.djangopro.com/2011/03/should-i-upgrade-to-django-1-3/</link>
		<comments>http://www.djangopro.com/2011/03/should-i-upgrade-to-django-1-3/#comments</comments>
		<pubDate>Sun, 27 Mar 2011 17:50:07 +0000</pubDate>
		<dc:creator>PK Shiu</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[django1.3]]></category>

		<guid isPermaLink="false">http://www.djangopro.com/?p=80</guid>
		<description><![CDATA[Should I upgrade my Django application to the current version? The very short answer is Yes. The slightly longer answer is &#8220;Yes if your application is more than a static site used by more than 10 people&#8221;. Starts with the general first. Upgrading an application that is already in production is always a hard decision. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/pkshiu/5565031486/"><img class="alignright" title="Should you Upgrade your Django application?" src="http://farm6.static.flickr.com/5051/5565031486_d9161499e4_m.jpg" alt="" width="162" height="240" /></a>Should I upgrade my Django application to the current version? The very short answer is Yes.</p>
<p>The slightly longer answer is &#8220;Yes if your application is more than a static site used by more than 10 people&#8221;.</p>
<p>Starts with the general first. Upgrading an application that is already in production is always a hard decision. What are general pros and cons?</p>
<h2>Cons</h2>
<ol>
<li>Cost &#8212; time and money. Someone has to (be paid) to do the work.</li>
<li>Break something &#8212; for a non trivial update, chances are you have to make some code changes. When you touch the code, you may break something. To make it worst, what if the original developers are gone?</li>
<li>Dependencies &#8212; if your application uses other third party software, have they upgraded? If they are incompatible with the new version, it will break.</li>
</ol>
<h2>Pros</h2>
<ol>
<li>New Features &#8212; The availability of a new feature on it&#8217;s own is not a good enough reason for upgrading. &#8220;The site works now, why change?&#8221; A developer may want to try out a new feature on a new release. But it has to have real benefit to the application to make this a Pro instead of a Con.</li>
<li>Speed Improvemence &#8212; platform vendors often upgrade a platform to improve performance. This is often a legitimate reason for upgrading.</li>
<li>Avoid obsolescence &#8212; This point applies especially to web frameworks. The web environment changes quickly. Platform provider may choose to end support for older versions quickly.</li>
<li>Security &#8212; This point also applies especially to web frameworks. New attacks are being develop every day. Beyond small emergency security fixes, a framework may add new security feature that is useful.</li>
</ol>
<p>Let&#8217;s focus on Django. Speaking from real world experience, we have upgraded production django sites from 1.1 to 1.2 to 1.3 each time a new release comes up. Our reasons for upgrading are driven primarily by new features that we can use. Our sites are all transactional in nature. The more sophisticated the site, the more of a reason to upgrade.</p>
<p>New Features We Like: Working backwards from the current 1.3 release:</p>
<h2>Django 1.3 Features that we like</h2>
<ul>
<li><a href="http://docs.djangoproject.com/en/dev/topics/logging/" target="_blank">Logging</a> &#8212; finally we don&#8217;t have to use our own logging module anymore</li>
<li><a href="http://docs.djangoproject.com/en/1.3/ref/forms/widgets/#django.forms.ClearableFileInput" target="_blank">ClearableFileInput</a> widget so that standard forms can easily delete previously uploaded file content without crazy hacked solutions</li>
<li>Support for lookups spanning relations in Django admin&#8217;s list_filter option &#8212; this makes list_filter actually useful. Often with a large object hierarchy it only make sense to use list_filter to limit/segment the data at the top levels of the hierarchy.</li>
<li><a href="http://docs.djangoproject.com/en/dev/topics/class-based-views/" target="_blank">Class Based Views</a> &#8212; This is a major new feature. I will post more on this later.</li>
<li>Unittest2 &#8212; The new unittest2 test support is now provided within Django 1.3 even if you are running an older release of python. Many features in <a href="http://www.voidspace.org.uk/python/articles/unittest2.shtml" target="_blank">unitest2</a> helps you write tests faster.</li>
</ul>
<h2>How to Convince Your Clients or Management to Upgrade?</h2>
<p>&#8220;If it ain&#8217;t broke don&#8217;t fixed it&#8221; maybe the response that you are getting. The best approach for us is to roll the upgrade work in with the next release. Initial conversion should not take more than one or two days. If you have a one week or a two weeks software release coming up, add the conversion work to it. That is what we do. And in the mean time, try upgrading on smaller non production sites.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djangopro.com/2011/03/should-i-upgrade-to-django-1-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Deprecation warning with get_db_prep_value for Django 1.3</title>
		<link>http://www.djangopro.com/2011/03/deprecation-warning-with-get_db_prep_value-for-django-1-3/</link>
		<comments>http://www.djangopro.com/2011/03/deprecation-warning-with-get_db_prep_value-for-django-1-3/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 21:38:53 +0000</pubDate>
		<dc:creator>PK Shiu</dc:creator>
				<category><![CDATA[QuickTips]]></category>
		<category><![CDATA[django1.3]]></category>

		<guid isPermaLink="false">http://www.djangopro.com/?p=73</guid>
		<description><![CDATA[If you are getting this warning: DeprecationWarning: A Field class whose get_db_prep_lookup method hasn't been updated to take `connection` and `prepared` arguments. Are you using django-picklefield ? If so, upgrade to the latest 0.1.9 version.]]></description>
			<content:encoded><![CDATA[<p>If you are getting this warning:</p>
<pre>DeprecationWarning: A Field class whose get_db_prep_lookup method hasn't been updated
to take `connection` and `prepared` arguments.
</pre>
<p>Are you using django-picklefield ? If so, upgrade to the <a href="http://pypi.python.org/pypi/django-picklefield">latest 0.1.9 version</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djangopro.com/2011/03/deprecation-warning-with-get_db_prep_value-for-django-1-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Django database migration tool: south, explained</title>
		<link>http://www.djangopro.com/2011/01/django-database-migration-tool-south-explained/</link>
		<comments>http://www.djangopro.com/2011/01/django-database-migration-tool-south-explained/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 16:13:17 +0000</pubDate>
		<dc:creator>PK Shiu</dc:creator>
				<category><![CDATA[Apps]]></category>

		<guid isPermaLink="false">http://www.djangopro.com/?p=43</guid>
		<description><![CDATA[Introduction If you are using Django for production level application, you will need to use south. Requirement changes, and therefore your data model will change over time. South is a great tool, but it is complicated. You do not want to make a mistake when migrating an application in production. This is a detail look [...]]]></description>
			<content:encoded><![CDATA[<h2><img class="alignleft" title="Initial sketch for diagrams" src="http://farm6.static.flickr.com/5085/5319960031_41b64af255_t.jpg" alt="" width="75" height="100" />Introduction</h2>
<p>If you are using Django for production level application, you will need to use south. Requirement changes, and therefore your data model will change over time. South is a great tool, but it is complicated. You do not want to make a mistake when migrating an application in production. This is a detail look at how it interacts with your application so that you can understand and use it better.</p>
<h2>Interaction</h2>
<p>South interacts (reads and writes) with four different items in an application. This is the most confusing part to me. The four items are:</p>
<ol>
<li>models.py &#8212; South reads this to determine your current data model.</li>
<li>migrations/*.py &#8212; South creates a sub directory inside your app, and creates for you a migration file for each database migration generation. You can also create these by hand, but normally you will let south creates them for you.</li>
<li>south_migrationhistory table in your database &#8212; when you install south, it creates it&#8217;s own table and use it to maintain states. Specifically it records the state of the database in this table. South assumes the application schema in the database is consistent with what it records in this table.</li>
<li>your application&#8217;s schema in your database &#8212; south create and update the schema for you according to the database migration generation, which is the ultimate purpose of using south.</li>
</ol>
<p>Different commands in south interacts with these items differently:</p>
<h2>Normal Migration</h2>
<p>Let is start with a normal database schema migration, from generation N to generation N+1. There are three steps in the migration:</p>
<pre>1. The developer (you) change the models.py file,
   updating the application's data model.
2. Run <strong>manage.py schemamigration app_name --auto</strong> to create
   a migration file for generation N+1.
3. Run <strong>manage.py migrate app_name</strong> to update the database
   schema and migrationhistory table to generation N+1.
</pre>
<p>This diagram shows what are the inputs and outputs to each step. (Note, in step 2 it reads all of the migration files from all previous generations):</p>
<p><a href="http://www.flickr.com/photos/pkshiu/sets/72157625737866024/"><img class="alignnone" title="Normal Migration" src="http://farm6.static.flickr.com/5124/5320564174_5bdafd7d21.jpg" alt="" width="500" height="321" /></a></p>
<h2>Initial Migration</h2>
<p>Let&#8217;s add the very first step when using south on a new applicatoin. The initial migration obviously does not have any previous south information. So there are still three steps, but the argument passed to schemamigrate is a little different:</p>
<pre>1. The developer (you) creates the first models.py file,
   defining the  application's data model.
2. Run <strong>manage.py schemamigrate app_name --initial</strong> to
   create a migration  file for generation 1.
3. Run <strong>manage.py migrate app_name</strong> to create the database
   schema and  migrationhistory table to generation 1.</pre>
<p>This diagram shows what are the inputs and outputs to each step, adding to the previous diagram:</p>
<p><a href="http://www.flickr.com/photos/pkshiu/sets/72157625737866024/"><img class="alignnone" title="Initial Migration" src="http://farm6.static.flickr.com/5127/5320563456_895c2cb7b2.jpg" alt="" width="500" height="480" /></a></p>
<h2>Converting an Application</h2>
<p>Converting an application is a little different because the database schema and the models are already in sync. Somehow we need to &#8220;trick&#8221; south into creating the other two items, the migration file and the migrationhistory table entry. We also need to deal with the conversion on the first instance vs other instances differently. For the first instance you will create the migration file, and for all other instances you will use the migration file to simply create the migration history table entry.</p>
<p>On the first app instance:</p>
<pre>1. Run <strong>manage.py convert_to_south app_name</strong> to create the migration
   file for generation 1, and also to create the migrationhistory entry.</pre>
<p>On other app instances:</p>
<pre>1. Run <strong>manage.py migrate app_name 0001 --fake</strong> to create
   the migrationhistory without changing the database schema.</pre>
<p>Diagram:</p>
<p><a href="http://www.flickr.com/photos/pkshiu/sets/72157625737866024/"><img class="alignnone" title="Converting App" src="http://farm6.static.flickr.com/5281/5320561940_fc4e3d31d8.jpg" alt="" width="480" height="500" /></a></p>
<h2>Useful Commands</h2>
<p>Another useful command is the list command. It shows all the migrations defined in the migration files, and whether they have been applied (by reading the migrationhistory table entries):</p>
<pre><strong>manage.py migrate --list</strong></pre>
<h4>Bonus</h4>
<p>This is my initial sketch for my explanation diagrams:</p>
<p><a href="http://www.flickr.com/photos/pkshiu/sets/72157625737866024/"><img class="alignnone" title="my diagramming sketch" src="http://farm6.static.flickr.com/5085/5319960031_41b64af255.jpg" alt="" width="375" height="500" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.djangopro.com/2011/01/django-database-migration-tool-south-explained/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Fix Python source code to use spaces instead of tabs</title>
		<link>http://www.djangopro.com/2010/10/fix-python-source-code-to-use-spaces-instead-of-tabs/</link>
		<comments>http://www.djangopro.com/2010/10/fix-python-source-code-to-use-spaces-instead-of-tabs/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 03:38:54 +0000</pubDate>
		<dc:creator>PK Shiu</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.djangopro.com/?p=16</guid>
		<description><![CDATA[What if someone gave you a Python source file that is indented using tabs? If you are using emacs, the following commands will let you convert it back to using spaces: # first set the buffer tab width to 4 (or whatever you like) M-x set-variable &#60;return&#62; tab-width &#60;return&#62; 4 # then mark the entire [...]]]></description>
			<content:encoded><![CDATA[<p>What if someone gave you a Python source file that is indented using tabs? If you are using emacs, the following commands will let you convert it back to using spaces:</p>
<pre class="brush: bash; title: ;">
# first set the buffer tab width to 4 (or whatever you like)
M-x set-variable &lt;return&gt; tab-width &lt;return&gt; 4

# then mark the entire file
C-x h

# do untabify to convert:
M-x untabify &lt;return&gt;
</pre>
<p>That&#8217;s it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djangopro.com/2010/10/fix-python-source-code-to-use-spaces-instead-of-tabs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Django production error handling</title>
		<link>http://www.djangopro.com/2010/10/django-production-error-handling/</link>
		<comments>http://www.djangopro.com/2010/10/django-production-error-handling/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 04:15:25 +0000</pubDate>
		<dc:creator>PK Shiu</dc:creator>
				<category><![CDATA[Configuration]]></category>

		<guid isPermaLink="false">http://www.djangopro.com/?p=37</guid>
		<description><![CDATA[Django provide a nice mechanism to report error in its &#8220;batteries included&#8221; goodness. You can easily setup the Django environment so that it will send you an email when a &#8220;server error&#8221; occurs. You just need to make sure the following is setup: Outbound email working The django environment must be able to send outbound [...]]]></description>
			<content:encoded><![CDATA[<p>Django provide a nice mechanism to report error in its &#8220;batteries included&#8221; goodness. You can easily setup the Django environment so that it will send you an email when a &#8220;server error&#8221; occurs. You just need to make sure the following is setup:</p>
<h2>Outbound email working</h2>
<p>The django environment must be able to send outbound emails. The actual requirement depends on your server environment, but you definitely need to have correct values setup for:</p>
<pre class="brush: python; title: ;">

settings.EMAIL_HOST
settings.EMAIL_PORT
settings.EMAIL_HOST_USER
settings.EMAIL_HOST_PASSWORD
</pre>
<h2>Admin users</h2>
<pre class="brush: python; title: ;">
settings.ADMINS -- this is a list of lists (or more accurately tuple of tuples)
settings.SERVER_EMAIL -- email address of the error reporting from address
</pre>
<h2>Debug Setup</h2>
<pre class="brush: python; title: ;">
settings.DEBUG=False
</pre>
<h2>500.html and 404.html</h2>
<p>Once DEBUG is off, Django will want to display your 500 or 404 page. Create these pages and make them available on one of our template directories.</p>
<h2>Example</h2>
<p>Here are some sample entries from my settings file:</p>
<pre class="brush: python; title: ;">

EMAIL_HOST='smtp.webfaction.com'
EMAIL_PORT=25
EMAIL_HOST_USER='my_mailbox_name'
EMAIL_HOST_PASSWORD='my_mailbox_password'
SERVER_EMAIL='webmaster@imperial-consulting.com'
ADMINS=( ('PK Shiu', 'support@imperial-consulting.com'),)
DEBUG=False
</pre>
<h2>Reference</h2>
<ul>
<li><a href="http://docs.djangoproject.com/en/dev/ref/settings/">Django settings file settings</a></li>
<li><a href="http://docs.djangoproject.com/en/dev/topics/email/">Django e-mail configuration</a></li>
<li><a href="http://docs.djangoproject.com/en/dev/howto/error-reporting/">Django Error Reporting via Email</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.djangopro.com/2010/10/django-production-error-handling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Django template: putting commas between a list of items</title>
		<link>http://www.djangopro.com/2010/09/django-template-putting-commas-between-a-list-of-items/</link>
		<comments>http://www.djangopro.com/2010/09/django-template-putting-commas-between-a-list-of-items/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 02:16:41 +0000</pubDate>
		<dc:creator>PK Shiu</dc:creator>
				<category><![CDATA[Template]]></category>

		<guid isPermaLink="false">http://www.djangopro.com/?p=4</guid>
		<description><![CDATA[This is a very common usage pattern. You have a list of items for display, perhaps a list of tags. The list can have zero, one or more items. How do you, using the Django template language, put commas between each item? 1. This simple way will not produce good result for a list of [...]]]></description>
			<content:encoded><![CDATA[<p>This is a very common usage pattern. You have a list of items for display, perhaps a list of tags. The list can have zero, one or more items. How do you, using the Django template language, put commas between each item?</p>
<p>1. This simple way will not produce good result for a list of one item:</p>
<pre class="brush: xml; title: ;">

toppings = [ 'cheese','tomatos','pineapple' ]
or toppings = ['cheese']

{% for t in toppings %}
{{ t }} ,
{% endfor %}
</pre>
<p>that will output:<br />
cheese, tomatos, pineapple,</p>
<p>or</p>
<p>cheese,</p>
<p>Note the ugly trailing comma.</p>
<p>2. This is the smart way using the template variables available in  loops:</p>
<pre class="brush: xml; title: ;">

{% for t in toppings %}
{% if not forloop.first %}, {% endif %}
{{ t }}
{% endfor %}
</pre>
<p>that will output:<br />
cheese, tomatos, pineapple</p>
<p>or</p>
<p>cheese<br />
No more trailing commas, thanks to the built in <a href="http://www.djangoproject.com/documentation/templates/#for">forloop  variables</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djangopro.com/2010/09/django-template-putting-commas-between-a-list-of-items/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Moving from Java to Django</title>
		<link>http://www.djangopro.com/2008/08/moving-from-java-to-django/</link>
		<comments>http://www.djangopro.com/2008/08/moving-from-java-to-django/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 02:21:23 +0000</pubDate>
		<dc:creator>PK Shiu</dc:creator>
				<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://www.djangopro.com/?p=9</guid>
		<description><![CDATA[I gave a short presentation on Django to the Cambridge Python Users group earlier. Nate has a great writeup of the event and the other presentations that evening. I just want to share the slides here. The slides are just visual reminders and do not stand on their own. If you want more info free [...]]]></description>
			<content:encoded><![CDATA[<p>I gave a short presentation on Django to the Cambridge Python Users group earlier. <a href="http://nateaune.com/2008/06/24/gigblastr-an-experimental-pylons-app-on-google-app-engine/">Nate</a> has a great writeup of the event and the other presentations that evening. I just want to share the slides here. The slides are just visual reminders and do not stand on their own. If you want more info free feel to shoot me an email.</p>
<p>I switched from J2EE to Django as my sole web application platform two years ago and has not looked back since. It allows me to develop, and more importantly maintain, web apps faster and better. It is more time and cost effective for <a href="http://www.imperial-consulting.com/">my customers and I</a>.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.vimeo.com/moogaloop.swf?clip_id=1254020&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://www.vimeo.com/moogaloop.swf?clip_id=1254020&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
<a href="http://www.vimeo.com/1254020?pg=embed&amp;sec=1254020">Slides from J2EE to Django Presentations at Cambrdge Python Group</a> from <a href="http://www.vimeo.com/user566207?pg=embed&amp;sec=1254020">PK Shiu</a> on <a href="http://vimeo.com?pg=embed&amp;sec=1254020">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djangopro.com/2008/08/moving-from-java-to-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

