- June 18, 2009
- 0 (after 0 ratings)
A number of people have kindly posted snippets on how to use pdb/ipdb with django. However, this only works when running the django development server.
I thought it would be nice to have a trace() command that would turn into a no-op when the development server is not running, so you wouldn't have to worry about leaving trace() commands in your code if you want to quickly test with mod_wsgi or mod_python.
The code above attempts (on Posix-like systems) to determine if the development server is running (by quickly checking if "manage.py runserver" is in the process list), and sets a DJANGO_SERVER setting appropriately. Then when you import the trace() method, it is defined as set_trace() if DJANGO_SERVER is True, or a no-op if DJANGO_SERVER is False.
When you hit the trace() in pdb/ipdb, enter "u" to go up to the calling trace() statement.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
In settings.py: `# Try to determine if the django server is running try: from commands import getoutput DJANGO_SERVER = getoutput('ps ax').find('manage.py runserver ') > 0 except ImportError: DJANGO_SERVER = False ` In a file which you import: `from django.conf import settings if settings.DJANGO_SERVER: try: import ipdb as pdb except ImportError: import pdb def trace(): pdb.set_trace() else: def trace(): pass ` In the file in which you want to insert a trace: from vs.utils import trace # vs.utils is where you defined the method above # some code trace()