I run a Django app on AWS Ubuntu machines managed by Chef. I have my own chef server, but you could also do hosted Chef to avoid the extra infrastructure.
Basically chef bootstraps the node from EC2, since you can only give it an initial keypair. Chef server will SSH into your box and install user accounts, the firewall, the webserver, tweak some settings (like mounting EBS volumes, restricting SSH, etc), install virtualenv and python. We use fabric to deploy, and that's when the code installs Django and whatnot in the virtualenv, as well as put the code on the machine.
Can't tell you if Chef is the best option. It's what I've been learning but it does have some rough edges. Finding the "right" cookbook is hard, because Opscode's listing isn't always the best. If you have concerns about using any particular setup to keep your environment homogenous (e.g. all init, upstart, runit, or supervisor) you'll have to put in quite a bit of work.