IT story

장고에서 디버깅하는 좋은 방법?

hot-time 2020. 2. 9. 19:24
반응형

장고에서 디버깅하는 좋은 방법? [닫은]


그래서 파이썬 과 나중에 장고 로 코딩하는 법을 배우기 시작했습니다 . 처음으로 역 추적을보기가 어려웠고 실제로 내가 잘못한 것과 구문 오류가 발생한 위치를 알아 냈습니다. 어느 정도 시간이 지났고 어떤 방식 으로든 장고 코드를 디버깅하는 루틴이 있다고 생각합니다. 이것이 코딩 경험 초기에 이루어 졌을 때, 나는 앉아서 어떻게이 일이 효과적이지 않고 더 빨리 이루어질 수 있는지 궁금해했다. 일반적으로 코드에서 버그를 찾아서 수정하지만 더 빨리해야하는지 궁금합니다.

나는 보통 Django가 활성화되면 디버그 정보를 사용합니다. 내가 생각했던대로 일이 끝나면 구문 오류로 코드 흐름을 많이 깨뜨리고 흐름에서 해당 시점의 변수를보고 코드가 내가 원하는 것 이외의 것을 수행하는 위치를 찾습니다.

그러나 이것이 개선 될 수 있습니까? 장고 코드를 디버깅하는 좋은 도구 나 더 좋은 방법이 있습니까?


여러 가지 방법이 있지만 가장 간단한 방법은 단순히 Python 디버거 를 사용하는 것 입니다. Django view 함수에 다음 줄을 추가하십시오.

import pdb; pdb.set_trace()

또는

breakpoint()  #from Python3.7

브라우저에서 해당 페이지를로드하려고하면 브라우저가 중단되고 실제 실행 코드를 디버깅하라는 메시지가 표시됩니다.

그러나 다른 옵션이 있습니다 (권장하지 않습니다).

* return HttpResponse({variable to inspect})

* print {variable to inspect}

* raise Exception({variable to inspect})

그러나 모든 유형의 Python 코드에는 Python Debugger (pdb)를 사용하는 것이 좋습니다. 이미 pdb 를 사용 중이 라면 디버깅 을 위해 ipython사용하는 IPDB살펴보고 싶을 것 입니다.

pdb에 대한 더 유용한 확장은

pdb ++ , Antash 에서 제안했습니다.

pudb , PatDuJour 가 제안 .

Seafangs가 제안한 Django의 Python 디버거 사용 .


Werkzeug 의 대화식 디버거를 정말 좋아 합니다. Django의 디버그 페이지와 비슷하지만 모든 레벨의 트레이스 백에서 대화식 쉘을 얻는다는 점이 다릅니다. django-extensions 를 사용하면 runserver_plus개발 서버를 시작하고 예외에 대한 Werkzeug의 디버거를 제공 하는 관리 명령이 제공됩니다.

물론 브라우저를 사용하는 모든 사람에게 서버 컨텍스트에서 임의의 파이썬 코드를 실행할 수있는 권한을 부여하므로 로컬에서만 실행해야합니다.


템플릿 태그에 대한 간단한 설명 :

@register.filter 
def pdb(element):
    import pdb; pdb.set_trace()
    return element

이제 템플릿 내에서 마음의 내용을 {{ template_var|pdb }}검사 할 수있는 pdb 세션 (로컬 개발 서버를 실행 한 경우)을 수행 하고 시작할 수 있습니다 element.

개체가 템플릿에 도착했을 때 무슨 일이 있었는지 확인할 수있는 아주 좋은 방법입니다.


잘 협력하여 디버깅 작업을보다 쉽게 ​​수행 할 수있는 몇 가지 도구가 있습니다.

Django 디버그 툴바 가 가장 중요합니다 .

그런 다음 Python 로깅 기능을 사용하여 적절한 로깅이 필요합니다 . 로깅 출력을 로그 파일로 보낼 수 있지만 더 쉬운 옵션은 로그 출력을 firepython에 보내는 입니다. 이것을 사용하려면 Firefox 브라우저에 firebug 확장명 을 사용해야합니다 . Firepython에는 Firebug 탭에 모든 서버 측 로깅을 표시하는 firebug 플러그인이 포함되어 있습니다.

Firebug 자체는 개발하는 모든 앱의 자바 스크립트 측면을 디버깅하는 데에도 중요합니다. (물론 JS 코드가 있다고 가정).

또한 pdb를 사용하여 대화식으로 뷰를 디버깅하기 위해 django-viewtools가 마음 에 들었지만 많이 사용하지는 않습니다.

메모리 누출을 추적하기 위해 도저와 같은 더 유용한 도구가 있습니다 (메모리 추적을 위해 SO에 대한 답변에 다른 좋은 제안이 있습니다).


나는 PyCharm (일식과 같은 pydev 엔진)을 사용합니다. 시각적으로 코드를 단계별로 살펴보고 무슨 일이 일어나고 있는지 확인할 수 있습니다.


지금까지 거의 모든 것이 언급되었으므로 iPythonpdb.set_trace() 을 사용하는 ipdb.set_trace ()사용할 수 있으므로 더 강력합니다 (자동 완성 및 기타 장점). 이 작업에는 ipdb 패키지가 필요하므로pip install ipdb


PyPI로 푸시 django-pdb했습니다 . pdb에 침입하려고 할 때마다 소스 코드를 편집 할 필요가없는 간단한 앱입니다.

설치는 단지 ...

  1. pip install django-pdb
  2. 추가 'django_pdb'INSTALLED_APPS

이제 실행할 수 있습니다 : manage.py runserver --pdb모든보기가 시작될 때 pdb에 침입하십시오 ...

bash: 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 /
function "myview" in testapp/views.py:6
args: ()
kwargs: {}

> /Users/tom/github/django-pdb/testproject/testapp/views.py(7)myview()
-> a = 1
(Pdb)

manage.py test --pdb테스트 실패 / 오류시 pdb에 침입 하려면 다음 실행하십시오 .

bash: manage.py test testapp --pdb
Creating test database for alias 'default'...
E
======================================================================
>>> test_error (testapp.tests.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../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)

이 프로젝트는 GitHub 에서 호스팅되며 , 기부금은 물론 환영합니다.


파이썬을 디버깅하는 가장 쉬운 방법은, 특히 Visual Studio에 사용되는 프로그래머의 경우 PTVS (Python Tools for Visual Studio)를 사용하는 것입니다. 단계는 간단합니다.

  1. http://pytools.codeplex.com/ 에서 다운로드하여 설치 하십시오.
  2. 중단 점을 설정하고 F5를 누르십시오.
  3. 중단 점에 도달하면 C # / C ++ 프로그램을 디버깅하는 것만 큼 쉽게 변수를 보거나 변경할 수 있습니다.
  4. 그게 다야 :)

PTVS를 사용하여 Django를 디버깅하려면 다음을 수행해야합니다.

  1. 프로젝트 설정-일반 탭에서 "시작 파일"을 Django 프로그램의 진입 점 인 "manage.py"로 설정하십시오.
  2. 프로젝트 설정-디버그 탭에서 "스크립트 인수"를 "runserver --noreload"로 설정하십시오. 핵심은 여기서 "--noreload"입니다. 설정하지 않으면 중단 점이 적중되지 않습니다.
  3. 즐기세요.

나는 Eclipse와 함께 pyDev 를 정말 잘 사용하고, 중단 점을 설정하고, 코드로 들어가고, 모든 객체와 변수에 대한 값을보고, 시험해보십시오.


나는 PyCharm을 사용 하고 끝까지 기다 립니다. 그것은 약간의 비용이 들었지만, 내가 얻는 이점은 귀중합니다. 콘솔에서 디버깅을 시도했는데 사람들이 그렇게 할 수있는 많은 신용을 얻었지만 시각적으로 응용 프로그램을 디버깅 할 수 있다는 것은 훌륭합니다.

그래도 PyCharm 은 많은 메모리를 사용합니다. 그러나 다시, 인생에서 선한 것은 없습니다. 방금 최신 버전 3을 제공했습니다. 또한 Django, Flask 및 Google AppEngine 과도 잘 작동합니다. 모든 개발자에게 유용한 도구라고 할 수 있습니다.

아직 사용하지 않는 경우 PyCharm의 힘을 살펴보기 위해 30 일 동안 시험판을 사용하는 것이 좋습니다. Aptana와 같은 다른 도구도 제공됩니다. 그러나 나는 PyCharm이 보이는 방식을 좋아한다고 생각합니다. 거기에서 내 앱을 디버깅하는 것이 매우 편안합니다.


때로는 특정 방법으로 탐색하고 pdb 소환이 너무 번거로울 때 다음을 추가합니다.

import IPython; IPython.embed()

IPython.embed() 호출 한 지점에서 로컬 변수에 액세스 할 수있는 IPython 쉘을 시작합니다.


내 관점에서 일반적인 코드 디버깅 작업을 세 가지 사용 패턴으로 나눌 수 있습니다.

  1. 뭔가 예외발생했습니다 : runserver_plus 'Werkzeug 디버거가 구조되었습니다. 모든 추적 수준에서 사용자 지정 코드를 실행할 수있는 기능이 가장 중요합니다. 그리고 당신이 완전히 붙어 있다면, 클릭 한 번으로 공유 할 요점을 만들 수 있습니다.
  2. 페이지가 렌더링되지만 결과가 잘못되었습니다 . 다시 Werkzeug가 흔들립니다. 코드에서 중단 점을 만들 assert False려면 중지하려는 위치를 입력 하십시오.
  3. 코드가 잘못 작동 하지만 빠른보기가 도움이되지 않습니다. 아마도 알고리즘 문제 일 것입니다. 한숨. 그리고 나는 보통 디버거 콘솔 불 PuDB을 : import pudb; pudb.set_trace(). [i] pdb의 주요 장점은 PuDB (80 년대의 모습)가 사용자 정의 시계 표현을 쉽게 설정한다는 것입니다. GUI를 사용하면 여러 개의 중첩 루프를 디버깅하는 것이 훨씬 간단합니다.

아, 그렇습니다. 가장 일반적인 (나와 동료에게) 문제는 잘못된 컨텍스트입니다. 변수가 없거나 변수에 속성이 없습니다. 디버그 도구 모음을 사용 하는 경우 "템플릿"섹션에서 컨텍스트를 검사하거나 충분하지 않은 경우 컨텍스트가 채워진 직후에 뷰 코드를 중단하십시오.

그렇습니다.


epdb (Extended Python Debugger)를 적극 권장합니다.

https://bitbucket.org/dugan/epdb

Django 또는 다른 Python 웹 서버를 디버깅하기 위해 epdb에 대해 좋아하는 것은 epdb.serve () 명령입니다. 추적을 설정하고 연결할 수있는 로컬 포트에서이를 제공합니다. 일반적인 사용 사례 :

단계별로 진행하고 싶은 견해가 있습니다. 추적을 설정하려는 지점에 다음을 삽입합니다.

import epdb; epdb.serve()

이 코드가 실행되면 Python 인터프리터를 열고 서빙 인스턴스에 연결합니다. 모든 값을 분석하고 n, s 등과 같은 표준 pdb 명령을 사용하여 코드를 단계별로 볼 수 있습니다.

In [2]: import epdb; epdb.connect()
(Epdb) request
<WSGIRequest
path:/foo,
GET:<QueryDict: {}>, 
POST:<QuestDict: {}>,
...
>
(Epdb) request.session.session_key
'i31kq7lljj3up5v7hbw9cff0rga2vlq5'
(Epdb) list
 85         raise some_error.CustomError()
 86 
 87     # Example login view
 88     def login(request, username, password):
 89         import epdb; epdb.serve()
 90  ->     return my_login_method(username, password)
 91
 92     # Example view to show session key
 93     def get_session_key(request):
 94         return request.session.session_key
 95

그리고 언제든지 epdb 도움말을 입력하는 방법을 배울 수 있습니다.

여러 epdb 인스턴스를 동시에 제공하거나 연결하려는 경우 수신 할 포트를 지정할 수 있습니다 (기본값은 8080).

import epdb; epdb.serve(4242)

>> import epdb; epdb.connect(host='192.168.3.2', port=4242)

지정하지 않으면 호스트의 기본값은 'localhost'입니다. 로컬 LAN의 개발 서버와 같은 로컬 인스턴스 이외의 것을 디버깅하는 데 이것을 사용하는 방법을 보여주기 위해 여기에 던졌습니다. 분명히 이렇게하면 세트 추적이 프로덕션 서버에서 절대로 발생하지 않도록주의하십시오!

빠른 참고로, epdb ( import epdb; epdb.set_trace())로 허용되는 답변과 동일한 작업을 계속 수행 할 수는 있지만 제공 기능을 강조하고 싶었습니다.


방금 wdb를 찾았습니다 ( http://www.rkblog.rk.edu.pl/w/p/debugging-python-code-browser-wdb-debugger/?goback=%2Egde_25827_member_255996401 ). 그것은 모든 종과 휘파람이있는 꽤 멋진 사용자 인터페이스 / GUI를 가지고 있습니다. 저자는 wdb에 대해 이것을 말합니다-

"PyCharm과 같은 IDE에는 자체 디버거가 있습니다. 유사하거나 동등한 기능 세트를 제공합니다. 그러나이를 사용하려면 특정 IDE를 사용해야합니다. "필요한 도구를 선택하십시오."

내가 그냥 전달할 줄 알았는데

파이썬 디버거에 대한 매우 유용한 기사 : https://zapier.com/engineering/debugging-python-boss/

마지막으로 Django에서 콜 스택의 멋진 그래픽 출력을 보려면 https://github.com/joerick/pyinstrument를 확인 하십시오 . MIDDLEWARE_CLASSES에 pyinstrument.middleware.ProfilerMiddleware를 추가 한 다음 요청 URL 끝에? profile을 추가하여 프로파일 러를 활성화하십시오.

명령 행에서 또는 모듈로 가져 와서 pyinstrument를 실행할 수도 있습니다.


내가 사용 PyCharm 다른 디버그 도구를. 또한 초보자를 위해 쉽게 설정할 수있는 멋진 기사도 있습니다. 여기서 시작할 수 있습니다. Django 프로젝트에서 일반적으로 PDB 및 GUI 디버깅에 대해 알려줍니다. 누군가가 그들에게 도움이되기를 바랍니다.


Django 코드를 디버깅하는 가장 좋은 방법 중 하나는 wdb를 사용하는 것입니다 : https://github.com/Kozea/wdb

wdb는 python 2 (2.6, 2.7), python 3 (3.2, 3.3, 3.4, 3.5) 및 pypy와 함께 작동합니다. 더 좋은 방법은 python 3에서 실행되는 wdb 서버로 python 2 프로그램을 디버깅하거나 그 반대로 또는 세 번째 컴퓨터의 웹 페이지 내 다른 컴퓨터에서 실행되는 디버깅 서버로 컴퓨터에서 실행되는 프로그램을 디버깅하는 것입니다! 더 나은 점은 이제 웹 인터페이스에서 코드 삽입을 사용하여 현재 실행중인 Python 프로세스 / 스레드를 일시 중지 할 수 있습니다. (gdb와 ptrace가 활성화되어 있어야합니다.) 다시 말해 멋진 기능을 갖춘 브라우저에서 바로 pdb의 매우 향상된 버전입니다.

서버를 설치하고 실행하고 코드에 다음을 추가하십시오.

import wdb
wdb.set_trace()

저자에 따르면 다음과 같은 주요 차이점 pdb은 다음과 같습니다.

프로젝트를 모르는 사람들을 위해 wdb는 pdb와 같은 파이썬 디버거이지만 매끄러운 웹 프론트 엔드 및 다음과 같은 많은 추가 기능이 있습니다.

  • 소스 구문 강조
  • 시각적 중단 점
  • jedi를 사용한 대화식 코드 완성
  • 지속적인 중단 점
  • 마우스를 이용한 심도 검사 멀티 스레딩 / 멀티 프로세싱 지원
  • 원격 디버깅
  • 시계 표현
  • 디버거 코드 에디션
  • 오류 발생시 인기있는 웹 서버 통합
  • 예를 들어 werkzeug 디버거와 달리 추적 (사후 아님) 중에 예외가 발생하는 경우
  • 코드 주입을 통해 현재 실행중인 프로그램 중단 (지원되는 시스템에서)

훌륭한 브라우저 기반 사용자 인터페이스가 있습니다. 사용하는 기쁨! :)


파이썬 코드의 해당 줄에 import pdb; pdb.set_trace()또는 breakpoint() (python3.7 양식)추가 하고 실행하십시오. 대화식 쉘로 실행이 중지됩니다. 쉘에서 파이썬 코드 (예 : 인쇄 변수)를 실행하거나 다음과 같은 명령을 사용할 수 있습니다.

  • c 계속 실행
  • n 동일한 기능 내에서 다음 줄로 이동
  • s 이 함수 또는 호출 된 함수의 다음 줄로 이동
  • q 디버거 / 실행을 종료

참조 : https://poweruser.blog/setting-a-breakpoint-in-python-438e23fe6b28


장고 개발에 Aptana를 사용하는 경우 다음을 확인하십시오 . http://www.youtube.com/watch?v=qQh-UQFltJQ

그렇지 않은 경우 사용을 고려하십시오.


대부분의 옵션은 이미 언급되어 있습니다. 템플릿 컨텍스트를 인쇄하기 위해 간단한 라이브러리를 만들었습니다. https://github.com/edoburu/django-debugtools를 참조 하십시오

{% load %}구성 없이 템플릿 컨텍스트를 인쇄하는 데 사용할 수 있습니다 .

{% print var %}   prints variable
{% print %}       prints all

사용자 정의 된 pprint 형식을 사용하여 변수를 <pre>태그 에 표시합니다 .


Visual Studio Code가 Django 앱을 디버깅하는 데 훌륭하다는 것을 알았습니다. 표준 python launch.json 매개 변수 python manage.py는 디버거가 첨부 된 상태로 실행 되므로 중단 점을 설정하고 원하는대로 코드를 단계별로 실행할 수 있습니다.


실수로 pdb를 라이브 커밋에 추가 할 수있는 사람들을 위해 #Koobz 답변의 확장을 제안 할 수 있습니다.

@register.filter 
def pdb(element):
    from django.conf import settings
    if settings.DEBUG:    
        import pdb
        pdb.set_trace()
    return element

PDB를 사용하는 것이 좋습니다.

import pdb
pdb.set_trace()

모든 변수 값을 검사하고 함수를 시작하는 등 다양한 작업을 수행 할 수 있습니다. https://docs.python.org/2/library/pdb.html

django-debug-toolbar https://github.com/django-debug-toolbar/django-debug-toolbar를 사용하고 있습니다.


다른 게시물에서 언급했듯이 코드에서 중단 점을 설정하고 코드를 통해 걷는 것으로 예상대로 작동하는지 확인하면 장고와 같은 것을 배우는 것이 좋은 방법이 될 때까지 장고와 같은 것을 배우는 좋은 방법입니다. 하고있다.

이렇게하려면 WingIde를 사용하는 것이 좋습니다. 언급 된 다른 IDE와 마찬가지로 사용하기 쉽고 레이아웃도 좋고 중단 점을 쉽게 설정할 수 있습니다. 스택을 평가 / 수정하는 등의 작업을 수행 할 때 코드가 수행하는 작업을 시각화하는 데 적합합니다. 나는 그것의 큰 팬입니다.

또한 PyCharm을 사용합니다. 우수한 정적 코드 분석 기능이 있으며 문제를 발견하기 전에 문제를 발견하는 데 도움이 될 수 있습니다.

이미 언급 한 바와 같이 장고 디버그 도구 모음이 필수적이다 - https://github.com/django-debug-toolbar/django-debug-toolbar

그리고 디버그 또는 분석 도구를 명시 적으로 지정하지는 않지만 Django Snippets의 https://djangosnippets.org/snippets/290/ 에서 제공 하는 SQL Printing Middleware 가 가장 좋아합니다.

뷰가 생성 한 SQL 쿼리가 표시됩니다. 이를 통해 ORM이 수행하는 작업과 쿼리가 효율적이거나 코드를 재 작업해야하는 경우 (또는 캐싱 추가)에 대해 이해할 수 있습니다.

내 응용 프로그램을 개발하고 디버깅하는 동안 쿼리 성능을 주시하는 것이 매우 중요합니다.

또 다른 팁-SQL 문이 아닌 요약 만 표시하기 위해 내 용도로 약간 수정했습니다. 따라서 개발 및 테스트하는 동안 항상 사용합니다. 또한 len (connection.queries)가 사전 정의 된 임계 값보다 큰 경우 추가 경고가 표시된다고 덧붙였습니다.

그런 다음 (성능 또는 쿼리 수 관점에서) 잘못된 것을 발견하면 SQL 문의 전체 표시를 다시 켜서 정확히 무슨 일이 일어나고 있는지 볼 수 있습니다. 여러 개발자와 함께 대규모 Django 프로젝트를 작업 할 때 매우 편리합니다.


pdb또는을 사용하십시오 ipdb. 이 두 가지 차이점은 ipdb가 자동 완성을 지원한다는 것입니다.

pdb 용

import pdb
pdb.set_trace()

ipdb 용

import ipdb
ipdb.set_trace()

줄 바꾸기 n를 실행하려면 계속 c키를 누르십시오. 를 사용하여 더 많은 옵션을 확인하십시오help(pdb)


내 경험으로는 두 가지 방법이 있습니다.

  1. pdb를 좋아하는 향상된 디버거 인 ipdb를 사용 하십시오 .

    import ipdb;ipdb.set_trace()또는 breakpoint() (python3.7에서)

  2. django shell을 사용하고 아래 명령을 사용하십시오. 새로운 뷰를 개발할 때 매우 유용합니다.

    python manage.py shell


추가 제안.

당신이 활용할 수 nosetestsPDB를 오히려 주입 함께 pdb.set_trace()수동으로보기에. 장점은 오류가 처음 시작될 때 잠재적으로 타사 코드에서 오류 조건을 관찰 할 수 있다는 것입니다.

오늘 나에게 오류가 있습니다.

TypeError at /db/hcm91dmo/catalog/records/

render_option() argument after * must be a sequence, not int

....


Error during template rendering

In template /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/crispy_forms/templates/bootstrap3/field.html, error at line 28
render_option() argument after * must be a sequence, not int
18  
19          {% if field|is_checkboxselectmultiple %}
20              {% include 'bootstrap3/layout/checkboxselectmultiple.html' %}
21          {% endif %}
22  
23          {% if field|is_radioselect %}
24              {% include 'bootstrap3/layout/radioselect.html' %}
25          {% endif %}
26  
27          {% if not field|is_checkboxselectmultiple and not field|is_radioselect %}
28  

      {% if field|is_checkbox and form_show_labels %}

이제 이것은 폼의 생성자를 훼손했으며 어떤 필드가 문제인지 잘 알고 있습니다. 그러나 pdb를 사용 하여 템플릿 내에서 싱싱한 양식에 대해 불만을 제기 할 수 있습니까?

예, 저는 할수 있습니다. nosetests 에서 --pdb 옵션 사용 :

tests$ nosetests test_urls_catalog.py --pdb

예외를 정상적으로 처리하자마자 pdb는 예외가 발생하는 곳을 멈추고 둘러 볼 수 있습니다.

  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py", line 537, in __str__
    return self.as_widget()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py", line 593, in as_widget
    return force_text(widget.render(name, self.value(), attrs=attrs))
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py", line 513, in render
    options = self.render_options(choices, [value])
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py", line 543, in render_options
    output.append(self.render_option(selected_choices, *option))
TypeError: render_option() argument after * must be a sequence, not int
INFO lib.capture_middleware log write_to_index(http://localhost:8082/db/hcm91dmo/catalog/records.html)
INFO lib.capture_middleware log write_to_index:end
> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py(543)render_options()
-> output.append(self.render_option(selected_choices, *option))
(Pdb) import pprint
(Pdb) pprint.PrettyPrinter(indent=4).pprint(self)
<django.forms.widgets.Select object at 0x115fe7d10>
(Pdb) pprint.PrettyPrinter(indent=4).pprint(vars(self))
{   'attrs': {   'class': 'select form-control'},
    'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]],
    'is_required': False}
(Pdb)         

파삭 파삭 한 필드 생성자에 대한 나의 선택 논거는 그것이 목록 / 튜플의 목록이 아니라 목록 내의 목록 이었음이 분명합니다.

 'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]]

깔끔한 것은이 pdb가 내 코드가 아닌 크리스피 코드 내에서 발생하고 수동으로 삽입 할 필요가 없다는 것입니다.


개발 중 빠른 추가

assert False, value

디버거를 사용할 필요없이 뷰 또는 다른 곳에서 문제를 진단하는 데 도움이 될 수 있습니다.

참고 URL : https://stackoverflow.com/questions/1118183/how-to-debug-in-django-the-good-way



반응형