Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to automatically reload Django when files change?

How to automatically monitor .py, .js and other source code files to restart a Django (or any other for that matter) application and refresh the browser when the source changes? This is possible in Rails using guard, in JS apps using grunt-contrib-watch and the accompanying livereload browser plugin. How can I do it for Python web apps such as Django?

I start my Django server with

foreman start 

this is my Procfile:

web: newrelic-admin run-program gunicorn app.wsgi 

as suggested by the Heroku/Newrelic docs or the usual

python manage.py runserver 

The runserver method does restart the server on .py source changes, but not the browser and doesn't watch other files - I could run guard alongside it, but then I have two processes I have to take care of, whereas grunt or rake offer unified interfaces. I'm wondering what is the recommended way of doing this among Python developers?

I could not find any detailed, comprehensive documentation on this - only incomplete discussions here and there.

like image 413
metakermit Avatar asked Sep 30 '13 12:09

metakermit


1 Answers

You don't need a browser extension to accomplish auto refreshes. Take a look at https://github.com/tjwalch/django-livereload-server.

I posted a more extensive answer about this at https://stackoverflow.com/a/36961244/2950621

It works by using a manage.py command (server) to monitor your .js and other static files. The server sends a signal to the browser via websockets. There is some client-side code injected on every page. The injected code responds to the signal and refresh the browser.

like image 141
nmgeek Avatar answered Sep 21 '22 15:09

nmgeek