Metadata-Version: 2.4
Name: django-pdb
Version: 0.6.2
Summary: Easier pdb debugging for Django
Home-page: https://github.com/tomchristie/django-pdb
Author: Tom Christie
Author-email: tom@tomchristie.com
License: Public Domain
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: Public Domain
Classifier: Framework :: Django
Classifier: Operating System :: OS Independent
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: home-page
Dynamic: license
Dynamic: summary

Django PDB
==========

Make debugging Django easier
----------------------------

Adding ``pdb.set_trace()`` to your source files every time you want to break into pdb sucks.

Don't do that.

Do this.

Installation
------------

Install using pip::

    pip install django-pdb

Add it to your settings.py.

For Django before 1.7 it needs to be added AFTER any apps that override the
`runserver` or `test` commands (includes south and django.contrib.staticfiles).

For Django after 1.7 it needs to be added BEFORE them.

.. code:: python

    # 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',
    )

Usage
-----

``manage.py runserver``

Drops into pdb at the start of a view if the URL includes a `pdb` GET parameter.

Drops into ipdb at the start of a view if the URL includes a `ipdb` GET parameter.

This behavior is only enabled if ``settings.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 --pdb`` **or** ``manage.py runserver --ipdb``

Drops 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 --pdb`` **or** ``manage.py test --ipdb``

Drops 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 mode
----------------

``manage.py runserver --pm``

Post mortem mode, drops into (i)pdb if an exception is raised in a view. This works only if there is
no other app overriding ``runserver`` command.

``POST_MORTEM = True``

You can also add ```POST_MORTEM = True``` to your ```settings.py``` to enable this option even if other app overrides ```runserver```.

Filter
------

You can also use the template filter ``pdb`` or ``ipdb`` to 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 37

This is useful to inspect a complex object that isn't behaving as expected or debug a filter.

Other apps that override ``test``/``runserver``
-----------------------------------------------

``manage.py test --pdb`` works if you also have other apps that
override the ``test`` command, as long as they use Python's unittest
framework.

Make sure to put ``django_pdb`` **after** any conflicting apps in
``INSTALLED_APPS`` so that they have priority.
