Package: django-pdb
Make debugging Django easierAddingpdb.set_trace()to your source files every time you want to break into pdb sucks.Don’t do that.Do this.InstallationInstall using pip:pip install django-pdbAdd it to your settings.py.For Django before 1.7 it needs to be added AFTER any apps that override therunserverortestcommands (includes south and django.contrib.staticfiles).For Django after 1.7 it needs to be added BEFORE them.# Order is important and depends on your Django version.# With Django 1.7+ put it towards the beginning, otherwise towards the end.INSTALLED_APPS=(...'django_pdb',...)# Make sure to add PdbMiddleware after all other middleware.# PdbMiddleware only activates when settings.DEBUG is True.MIDDLEWARE_CLASSES=(...'django_pdb.middleware.PdbMiddleware',)Usagemanage.py runserverDrops into pdb at the start of a view if the URL includes apdbGET parameter.Drops into ipdb at the start of a view if the URL includes aipdbGET parameter.This behavior is only enabled ifsettings.DEBUG = True:bash: testproject/manage.py runserver
Validating models...

0 errors found
Django version 1.3, using settings 'testproject.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

GET /test?pdb
function "myview" in testapp/views.py:7
args: ()
kwargs: {}

> /Users/tom/github/django-pdb/testproject/testapp/views.py(8)myview()
-> a = 1
(Pdb)manage.py runserver--pdbormanage.py runserver--ipdbDrops into pdb/ipdb at the start of every view:bash: testproject/manage.py runserver --pdb
Validating models...

0 errors found
Django version 1.3, using settings 'testproject.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

GET /test
function "myview" in testapp/views.py:7
args: ()
kwargs: {}

> /Users/tom/github/django-pdb/testproject/testapp/views.py(7)myview()
-> a = 1
(Pdb)manage.py test--pdbormanage.py test--ipdbDrops into pdb/ipdb on test errors/failures:bash: testproject/manage.py test testapp --pdb
Creating test database for alias 'default'...
E
======================================================================
>>> test_error (testapp.tests.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/tom/github/django-pdb/testproject/testapp/tests.py", line 16, in test_error
    one_plus_one = four
NameError: global name 'four' is not defined
======================================================================

> /Users/tom/github/django-pdb/testproject/testapp/tests.py(16)test_error()
-> one_plus_one = four
(Pdb)Post mortem modemanage.py runserver--pmPost mortem mode, drops into (i)pdb if an exception is raised in a view. This works only if there is
no other app overridingrunservercommand.POST_MORTEM = TrueYou can also add`POST_MORTEM = True`to your`settings.py`to enable this option even if other app overrides`runserver`.FilterYou can also use the template filterpdboripdbto explore a template variable in (i)pdb this way:{% load pdb %}

{{ variable|pdb }}
{{ variable|ipdb }}
{{ variable|ipdb|a_filter_to_debug }}Example:bash: testproject/manage.py runserver
Validating models...

0 errors found
Django version 1.4, using settings 'testproject.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
> /Users/tom/github/django-pdb/django_pdb/templatetags/pdb_filters.py(14)pdb()
-> return element
(Pdb) element
"I'm the variable"
(Pdb) element = "another value"
(Pdb) c
[11/May/2012 11:22:53] "GET /filter/ HTTP/1.1" 200 37This is useful to inspect a complex object that isn’t behaving as expected or debug a filter.Other apps that overridetest/runservermanage.py test--pdbworks if you also have other apps that
override thetestcommand, as long as they use Python’s unittest
framework.Make sure to putdjango_pdbafterany conflicting apps inINSTALLED_APPSso that they have priority.