Как отлаживать в Django, хороший способ?

432

Итак, я начал изучать код Python и позже Django. В первый раз было трудно смотреть на трассировки и фактически выяснить, что я сделал не так, и где была синтаксическая ошибка. Некоторое время прошло и в пути, похоже, у меня есть рутина в отладке моего кода Django. Поскольку это было сделано в начале моего опыта кодирования, я сел и задавался вопросом, как я делаю это, было неэффективно и могло быть сделано быстрее. Обычно мне удается найти и исправить ошибки в моем коде, но мне интересно, нужно ли делать это быстрее?

Я обычно использую информацию об отладке, когда Django дает, когда включен. Когда все заканчивается, как я думал, это будет, я сильно разбиваю поток кода с синтаксической ошибкой и смотрю на переменные в этой точке потока, чтобы выяснить, где код делает что-то отличное от того, что я хотел.

Но можно ли это улучшить? Есть ли хорошие инструменты или лучшие способы отладки вашего кода Django?

  • 0
    мне нравится использовать django-debug-toolbar, он очень удобен
  • 0
    Или используйте встроенный в отладчик Python код Visual Studio, как описано здесь code.visualstudio.com/docs/python/tutorial-django
Теги:
debugging

27 ответов

442
Лучший ответ

Существует множество способов сделать это, но самым простым является просто используйте отладчик Python. Просто добавьте следующую строку в функцию просмотра Django:

import pdb; pdb.set_trace()

Если вы попытаетесь загрузить эту страницу в своем браузере, браузер зависнет, и вы получите приглашение продолжить отладку на фактическом исполняемом коде.

Однако есть другие варианты, предложенные другими (я не буду рекомендовать их):

* return HttpResponse({variable to inspect})

* print {variable to inspect}

* raise Exception({variable to inspect})

Но Python Debugger (pdb) настоятельно рекомендуется для всех типов кода Python. Если вы уже находитесь в pdb, вам также нужно взглянуть на IPDB, в котором используется ipython для отладки. Счастливое кодирование.

Полезная ссылка Seafangs: Использование отладчика Python в Django

  • 61
    +1 за предложение pdb. Однако стоит отметить, что это действительно работает только при использовании сервера разработки на вашем локальном компьютере, так как приглашение появится в консоли.
  • 12
    Смотрите также django-pdb согласно моему ответу ниже. Дает вам команды manage.py runserver --pdb и manage.py test --pdb .
Показать ещё 13 комментариев
190

Мне действительно нравится Werkzeug интерактивный отладчик. Он похож на страницу отладки Django, за исключением того, что вы получаете интерактивную оболочку на каждом уровне трассировки. Если вы используете django-extensions, вы получаете команду управления runserver_plus, которая запускает сервер разработки и предоставляет отладчик Werkzeug для исключений.

Конечно, вы должны запускать только локально, так как он дает любому, у кого есть браузер, права на выполнение произвольного кода на языке Python в контексте сервера.

  • 10
    Лучший ответ на данный момент! Как бы хороша ни была панель инструментов отладки django, отладчик werkzeug превосходит ее :) И самое худшее во всем этом - я использую расширения django уже около полугода и раньше не знал о вещи runserver_plus ...
  • 12
    Это не позволяет вам шагать по коду, хотя это большая часть отладки.
Показать ещё 4 комментария
150

Немного quickie для тегов шаблонов:

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

Теперь внутри шаблона вы можете сделать {{ template_var|pdb }} и ввести сеанс pdb (если вы используете локальный сервер разработки), где вы можете проверить element на ваш сердечный контент.

Это очень хороший способ узнать, что произошло с вашим объектом, когда он приходит к шаблону.

  • 1
    это замечательно. Еще одна вещь, которую вы можете сделать, если у вас возникли проблемы с шаблонами, это переключиться на jinja2 (загружается через coffin) - это расширение шаблонов django, что, на мой взгляд, является улучшением. Он также лучше интегрирует шаблоны и наследование шаблонов в фреймы трассировки, чем django.
  • 0
    Это прекрасно. К сожалению, трудно найти чистый способ интеграции этого в кодовую базу, которая отказывается от любого коммита, включая импорт pdb.
69

Есть несколько инструментов, которые хорошо взаимодействуют и могут облегчить задачу отладки.

Самое главное - панель инструментов отладки Django.

Затем вам нужен хороший журнал, используя средство Python logging. Вы можете отправить вывод журнала в файл журнала, но более простой вариант отправляет вывод журнала в firepython. Чтобы использовать это, вам необходимо использовать браузер Firefox с расширением firebug. Firepython включает плагин firebug, который будет отображать любой серверный журнал на вкладке Firebug.

Firebug сам по себе также имеет решающее значение для отладки стороны Javascript любого приложения, которое вы разрабатываете. (Предположим, что у вас есть код JS, конечно).

Мне также понравился django-viewtools для интерактивного использования отладочных представлений с помощью pdb, но я не так сильно его использую.

Есть более полезные инструменты, такие как dozer для отслеживания утечек памяти (есть и другие полезные рекомендации, приведенные в ответах здесь, на SO для отслеживания памяти).

45

Я использую PyCharm (такой же двигатель pydev, что и eclipse). На самом деле помогает мне визуально быть в состоянии выполнить мой код и посмотреть, что происходит.

  • 1
    Лучшая вещь об этом - это просто работает и является полностью интуитивным. Просто нажмите слева от строки и нажмите кнопку отладки. Это хорошо работает и для исходного кода Django, если вы хотите лучше понять, как работает внутренний код. Мне потребовалось некоторое время, прежде чем я заметил это, но вы можете поместить точки останова в любой код в папке внешних библиотек файлового навигатора.
  • 4
    Стоит отметить, что PyCharm использует отладчик PyDev под капотом для кредитов.
Показать ещё 1 комментарий
38

Почти все упоминалось до сих пор, поэтому я добавлю, что вместо pdb.set_trace() можно использовать ipdb.set_trace(), который использует iPython и, следовательно, более мощный (автозаполнение и другие лакомства). Для этого требуется пакет ipdb, поэтому вам нужно только pip install ipdb

  • 1
    Я рекомендую pdb ++, который обеспечивает очень полезный режим закрепления.
25

Я нажал django-pdb на PyPI. Это простое приложение, которое означает, что вам не нужно редактировать исходный код каждый раз, когда вы хотите перерасти в pdb.

Установка просто...

  • pip install django-pdb
  • Добавьте '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, вклады, конечно же, приветствуются.

  • 3
    Это было бы здорово, если бы вы могли указать номер файла / строки для разбивки (не только вид).
  • 0
    На что я мог бы оставить в коде подобные комментарии, которые инертны в процессе производства. Возможно, это плохой парадокс, но было бы здорово эффективно раздеть и применить перерывы волей-неволей.
Показать ещё 1 комментарий
19

Самый простой способ отладки python - особенно для программистов, которые используются для Visual Studio - использует PTVS (Python Tools для Visual Studio). Шаги просты:

  • Загрузите и установите его из http://pytools.codeplex.com/
  • Установите точки останова и нажмите F5.
  • Ваша точка останова попала, вы можете просматривать/изменять переменные так же просто, как отладка программ на С#/С++.
  • Что все:)

Если вы хотите отлаживать Django с помощью PTVS, вам необходимо сделать следующее:

  • В разделе "Настройки проекта" - вкладка "Общие" установите "Загрузочный файл" на "manage.py", точку входа в программу Django.
  • В настройках проекта - вкладка "Отладка", установите "Script" Аргументы "на" runningerver --noreload ". Ключевым моментом здесь является" -noreload". Если вы его не установили, ваши точки останова не пострадают.
  • Наслаждайтесь этим.
  • 0
    Спасибо, это отлично сработало. --Noreload был тем, что нам было нужно
  • 0
    Есть ли функция для отладки на удаленном сервере - похожая на Eclipse PyDev, которую я использую в данный момент?
Показать ещё 1 комментарий
14

Я использую pyDev, и Eclipse действительно хорош, задает точки останова, вступает в код, просматривает значения для любых объектов и переменных,.

  • 0
    Вы должны запустить dev-сервер через eclipse (для облегчения отладки). PyDev утверждает, что имеет удаленную отладку, но никогда не использовал ее, я не могу говорить о качестве опыта разработки. Подробности: pydev.org/manual_adv_remote_debugger.html
  • 2
    Удаленный отладчик PyDev прекрасно работает с сервером разработки Django. Просто убедитесь, что у вас есть «Когда файл изменяется, автоматически перезагрузить модуль?» опция '' disabled '' в настройках запуска / отладки PyDev. В противном случае сервер dev и pydev будут пытаться перезагрузить код во время отладки, что сильно запутает их обоих.
8

С моей точки зрения, мы могли бы разбить общие задачи отладки кода на три разных шаблона использования:

  • Что-то имеет вызвало исключение: runserver_plus 'Отладчик Werkzeug для спасения. Возможность запуска пользовательского кода на всех уровнях трассировки является убийцей. И если вы полностью застряли, вы можете создать Gist, чтобы поделиться им одним щелчком.
  • Страница отображается, но результат неверен: снова, Werkzeug rocks. Чтобы создать контрольную точку в коде, просто введите assert False в том месте, где вы хотите остановиться.
  • Код работает неправильно, но быстрый взгляд не помогает. Скорее всего, алгоритмическая проблема. Вздох. Затем я обычно запускаю консольный отладчик PuDB: import pudb; pudb.set_trace(). Основным преимуществом над [i] pdb является то, что PuDB (при просмотре, как вы в 80-х) делает настройку пользовательских выражений часов ветерок. И отладка пучка вложенных циклов намного проще с графическим интерфейсом.

А, да, проблемы с шаблонами. Самая распространенная проблема (для меня и моих коллег) - неправильный контекст: либо у вас нет переменной, либо у вашей переменной нет атрибута. Если вы используете панель инструментов отладки, просто просмотрите контекст в разделе "Шаблоны" или, если этого недостаточно, установите перерыв в кодах ваших просмотров сразу после ваш контекст заполнен.

Так оно и есть.

  • 0
    меньше печатать используя import pudb;pu.db
7

Я использую PyCharm и поддерживаю его полностью. Мне это стоило немного, но я должен сказать, что преимущество, которое я получаю, бесценно. Я попробовал отладку с консоли, и я даю людям много кредитов, которые могут это сделать, но для меня возможность визуально отлаживать приложения (приложения) отлично.

Я должен сказать, что PyCharm действительно занимает много памяти. Но опять же, ничего хорошего в жизни не бывает. Они просто пришли со своей последней версией 3. Он также отлично сочетается с Django, Flask и Google AppEngine. Итак, в целом, я бы сказал, что это отличный удобный инструмент для любого разработчика.

Если вы еще не используете его, я бы рекомендовал получить пробную версию в течение 30 дней, чтобы взглянуть на мощь PyCharm. Я уверен, что есть и другие инструменты, такие как Aptana. Но я думаю, мне тоже нравится, как выглядит PyCharm. Я чувствую себя очень комфортно, отлаживая свои приложения там.

  • 0
    Это может быть первая IDE, которую я когда-либо куплю. Отладка проекта в виртуальной машине звучит как волшебство, за которое стоит заплатить.
6

Иногда, когда я пытаюсь исследовать в определенном методе, и вызов pdb слишком громоздкий, я бы добавил:

import IPython; IPython.embed()

IPython.embed() запускает оболочку IPython, которая имеет доступ к локальным переменным с того места, где вы его вызываете.

6

Я только что нашел wdb (http://www.rkblog.rk.edu.pl/w/p/debugging-python-code-browser-wdb-debugger/?goback=%2Egde_25827_member_255996401). У этого есть довольно приятный пользовательский интерфейс/графический интерфейс со всеми звонками и свистами. Автор говорит об этом wdb -

"Есть IDE, такие как PyCharm, у которых есть свои собственные отладчики. Они предлагают одинаковый или равный набор функций... Однако для их использования вы должны использовать те специфические IDE (а некоторые из них являются несвободными или не могут быть доступный для всех платформ). Выберите подходящий инструмент для ваших нужд.

Думаю, я просто передал бы это.

Также очень полезная статья о отладчиках python: https://zapier.com/engineering/debugging-python-boss/

Наконец, если вы хотите увидеть красивую графическую распечатку своего стека вызовов в Django, checkout: https://github.com/joerick/pyinstrument. Просто добавьте pyinstrument.middleware.ProfilerMiddleware в MIDDLEWARE_CLASSES, а затем добавьте? Profile в конец URL-адреса запроса, чтобы активировать профайлер.

Можно также запустить pyinstrument из командной строки или импортировать в качестве модуля.

  • 0
    Я думаю, что PyCharm использует PyDev, а не свой собственный.
6

Я очень рекомендую epdb (Extended Python Debugger).

https://bitbucket.org/dugan/epdb

Одна вещь, которую мне нравится в epdb для отладки Django или других веб-серверов Python, - это команда epdb.serve(). Это устанавливает трассировку и служит для этого на локальном порту, к которому вы можете подключиться. Типичный вариант использования:

У меня есть представление, что я хочу пройти шаг за шагом. Я буду вставлять следующее в точке, где я хочу установить трассировку.

import epdb; epdb.serve()

После выполнения этого кода я открываю интерпретатор Python и подключаюсь к экземпляру службы. Я могу проанализировать все значения и выполнить код с помощью стандартных команд pdb, таких как n, s и т.д.

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", если не указано. Я бросил его здесь, чтобы продемонстрировать, как вы можете использовать это для отладки чего-то другого, кроме локального экземпляра, например сервера разработки в локальной локальной сети. Очевидно, что если вы сделаете это, будьте осторожны, чтобы установленная трассировка никогда не попадала на ваш производственный сервер!

Как бы то ни было, вы все равно можете сделать то же самое, что и принятый ответ с помощью epdb (import epdb; epdb.set_trace()), но я хотел бы выделить функциональность сервиса, так как я нашел его таким полезным.

  • 0
    epdb не обновляется с 2011 года. Вы когда-нибудь сталкивались с проблемами при использовании его в более новых версиях Django и / или Python?
  • 0
    Я никогда не сталкивался с проблемами при использовании его против Python 2 (в частности, 2.4-2.7). Я использовал это всего несколько дней назад, на самом деле. Я никогда не пробовал с Python 3.
Показать ещё 1 комментарий
3

Я использую PyCharm и различные инструменты отладки. Также у вас есть хорошие статьи о том, как легко настроить эти вещи для новичков. Вы можете начать здесь. В нем рассказывается об отладке PDB и GUI в целом с проектами Django. Надеюсь, кто-то выиграет от них.

2

Мне нравятся ответы, которые я могу скопировать напрямую. И мне нравится IPython:

pip install ipdb

В вашем коде:

import ipdb; ipdb.set_trace()
2

Большинство вариантов упоминаются как alredy. Чтобы распечатать контекст шаблона, я создал для него простую библиотеку. См. https://github.com/edoburu/django-debugtools

Вы можете использовать его для печати контекста шаблона без какой-либо конструкции {% load %}:

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

Он использует настраиваемый формат pprint для отображения переменных в теге <pre>.

2

Если вы используете Aptana для разработки django, смотрите это: http://www.youtube.com/watch?v=qQh-UQFltJQ

Если нет, подумайте над его использованием.

1

Добавьте import pdb; pdb.set_trace() в соответствующую строку в коде Python и выполните его. Выполнение будет прекращено с помощью интерактивной оболочки. В оболочке вы можете выполнить код Python (т.е. Печатать переменные) или использовать такие команды, как:

  • c продолжить выполнение
  • n перейти к следующей строке в пределах той же функции
  • s перейти к следующей строке в этой функции или вызванной функции
  • q выйти из отладчика/выполнения

Также см.: https://poweruser.blog/setting-a-breakpoint-in-python-438e23fe6b28

1

Для тех, кто может случайно добавить pdb в живые коммиты, я могу предложить это расширение ответа # Koobz:

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

Как упоминалось в других сообщениях здесь - установка контрольных точек в вашем коде и прохождение через код, чтобы увидеть, ведет ли он себя так, как вы ожидали, - это отличный способ узнать что-то вроде Django, пока у вас не будет хорошее представление о том, как все это ведет - и что делает ваш код.

Для этого я бы рекомендовал использовать WingIde. Так же, как и другие упомянутые IDE, приятные и простые в использовании, приятные макеты, а также легко установить контрольные точки для оценки/изменения стека и т.д. Идеально подходит для визуализации того, что делает ваш код при его прохождении. Я большой поклонник этого.

Также я использую PyCharm - он обладает отличным анализом статического кода и может помочь иногда выявлять проблемы, прежде чем вы поймете, что они есть.

Как уже упоминалось, необходима панель инструментов django-debug - https://github.com/django-debug-toolbar/django-debug-toolbar

И хотя явным образом не инструмент отладки или анализа - один из моих избранных SQL Printing Middleware доступен из Django Snippets по адресу https://djangosnippets.org/snippets/290/

Здесь будут отображаться SQL-запросы, сгенерированные вашим представлением. Это даст вам хорошее представление о том, что делает ORM, и если ваши запросы эффективны или вам нужно переработать код (или добавить кеширование).

Я считаю его неоценимым для того, чтобы следить за эффективностью запросов при разработке и отладке моего приложения.

Только один совет - я немного изменил его для собственного использования, чтобы показать только сводку, а не инструкцию SQL... Поэтому я всегда использую ее при разработке и тестировании. Я также добавил, что если len (connection.queries) больше заданного порога, он отображает дополнительное предупреждение.

Затем, если я вижу что-то плохое (с точки зрения производительности или количества запросов), я возвращаюсь к полному отображению операторов SQL, чтобы точно видеть, что происходит. Очень удобно, когда вы работаете над большим проектом Django с несколькими разработчиками.

1

Я настоятельно рекомендую использовать 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

0

Один из лучших вариантов для отладки кода 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 2 с сервером wdb, работающим на python 3, и наоборот или отлаживать программу, запущенную на компьютере с сервером отладки, запущенным на другом компьютере внутри веб-страницы на третьем компьютере! Еще лучше, теперь можно приостановить текущий выполняемый процесс/поток python, используя инъекцию кода из веб-интерфейса. (Для этого требуются gdb и ptrace) Другими словами, это очень улучшенная версия pdb прямо в вашем браузере с приятными функциями.

Установите и запустите сервер, а в коде добавьте:

import wdb
wdb.set_trace()

Согласно автору, основными отличиями от pdb являются:

Для тех, кто не знает проект, wdb - отладчик python, такой как pdb, но с интерфейсом с гладким веб-интерфейсом и множеством дополнительных функций, таких как:

  • Выделение синтаксиса источника
  • Визуальные точки останова
  • Интерактивное завершение кода с использованием jedi
  • Постоянная точка останова
  • Проверка объектов с помощью мыши Поддержка многопоточности/многопроцессорности
  • Удаленная отладка
  • Смотреть выражения
  • В редакции кода отладчика
  • Интеграция популярных веб-серверов для устранения ошибки
  • При исключении исключения во время трассировки (не посмертного) в отличие от отладчика werkzeug, например
  • Нарушение текущих запущенных программ с помощью ввода кода (в поддерживаемых системах)

Он имеет отличный пользовательский интерфейс на основе браузера. Радость в использовании!:)

  • 0
    В чем разница с pdb?
0

Я нахожу, что Visual Studio Code отлично подходит для отладки приложений Django. Стандартные параметры запуска python launch.json запускают python manage.py с прикрепленным отладчиком, поэтому вы можете установить точки останова и выполнить свой код по своему усмотрению.

0

Во время разработки добавление быстрого

assert False, value

может помочь диагностировать проблемы во взглядах или где-либо еще, без необходимости использовать отладчик.

0

используйте pdb или ipdb. Разница между этими двумя - ipdb поддерживает автоматическое завершение.

для pdb

import pdb
pdb.set_trace()

для ipdb

import ipdb
ipdb.set_trace()

Для выполнения новой строки нажмите клавишу n, для продолжения нажмите клавишу c. проверьте дополнительные параметры, используя help(pdb)

0

Дополнительное предложение.

Вы можете использовать nosetests и pdb вместе, вместо того, чтобы вставлять 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, чтобы узнать, что жалкие формы жалуются, в шаблоне?

Да, могу. Использование опции -pdb для nosetests:

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 происходит внутри хрустящего кода, а не моего, и мне не нужно вставлять его вручную.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню