Django and runserver 0.0.0.0

I’ve been trying to figure out how best to access my local Django dev server from other machines on my network. Now I seem to have found an answer.

What I was doing

Running with just:

manage.py runserver

only makes the system available via localhost which is of course useless for other machines on the network. To solve this I was looking up the ip for my machine and passing that to runsever:

manage.py runserver 192.168.10.2:8000

That works for the most part but now I also have to use the ip in the url (localhost doesn’t work anymore). Also for some reason this was not accessible from my iPhone or iPad which makes testing on them harder. (I think this is because of my network setup since I have different subnets).
After putting up with this for a while I started looking around for a better way to handle this and I found it!

The better way

From searching I found this Django ticket (#396) which has a very interesting comment

Use runserver 0.0.0.0:8000 to make it listen on all interfaces

Could it really be that simple? So I tried it out and yep it totally is.

manage.py runserver 0.0.0.0:8000

Now I can access my Django dev server using localhost on the local machine, my ip address from other machines and even my_machine_name.local:8000 from my iPhone or iPad. Awesome.

Conclusion

You might want to be careful how you use this since you are obviously allowing access from way more places but for myself (and I’m guessing a lot of others) this is far more convenient. I was using a bash alias to launch runserver with my ip address. I’ll be changing that over to this method right away.