Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/HassenPy/django-pdb
Gives you `manage.py runserver --pdb` and `manage.py test --pdb`
https://github.com/HassenPy/django-pdb
Last synced: 3 months ago
JSON representation
Gives you `manage.py runserver --pdb` and `manage.py test --pdb`
- Host: GitHub
- URL: https://github.com/HassenPy/django-pdb
- Owner: HassenPy
- Created: 2011-07-29T19:01:18.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2022-09-13T17:01:55.000Z (over 2 years ago)
- Last Synced: 2024-07-15T04:22:56.694Z (5 months ago)
- Language: Python
- Size: 71.3 KB
- Stars: 394
- Watchers: 13
- Forks: 61
- Open Issues: 11
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.txt
- Contributing: CONTRIBUTING.md
Awesome Lists containing this project
README
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 37This 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.