Добрый день, у меня возникает ошибка переполнения стека, когда я пытаюсь использовать DJDT 1.8 на маршрутах, обслуживаемых Wagtail CMS. Те же маршруты / страницы работают с DJDT 1.7. Я использую Django 1.11.2 и Wagtail 1.10.1. Вот след:
Fatal Python error: Cannot recover from stack overflow.
Current thread 0x00007f5d3f7f8700 (most recent call first):
File "/venv-path/django/utils/functional.py", line 215 in wrapper
File "/venv-path/django/template/base.py", line 835 in __init__
File "/venv-path/django/template/base.py", line 685 in __init__
File "/venv-path/django/template/base.py", line 600 in compile_filter
File "/venv-path/django/template/defaulttags.py", line 826 in do_for
File "/venv-path/django/template/base.py", line 513 in parse
File "/venv-path/django/template/base.py", line 230 in compile_nodelist
File "/venv-path/django/template/base.py", line 191 in __init__
File "/venv-path/django/template/loaders/base.py", line 44 in get_template
File "/venv-path/django/template/engine.py", line 136 in find_template
File "/venv-path/django/template/engine.py", line 162 in get_template
File "/venv-path/django/template/backends/django.py", line 39 in get_template
File "/venv-path/django/template/loader.py", line 21 in get_template
File "/venv-path/django/template/loader.py", line 67 in render_to_string
File "/venv-path/wagtail/wagtailcore/blocks/base.py", line 259 in render
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 377 in __html__
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 380 in __str__
File "/venv-path/django/utils/encoding.py", line 76 in force_text
File "/venv-path/debug_toolbar/panels/templates/panel.py", line 128 in _store_template_info
File "/venv-path/django/dispatch/dispatcher.py", line 193 in <listcomp>
File "/venv-path/django/dispatch/dispatcher.py", line 193 in send
File "/venv-path/django/test/utils.py", line 106 in instrumented_test_render
File "/venv-path/django/template/base.py", line 207 in render
File "/venv-path/django/template/backends/django.py", line 66 in render
File "/venv-path/django/template/loader.py", line 68 in render_to_string
File "/venv-path/wagtail/wagtailcore/blocks/base.py", line 259 in render
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 377 in __html__
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 380 in __str__
File "/venv-path/django/utils/encoding.py", line 76 in force_text
File "/venv-path/debug_toolbar/panels/templates/panel.py", line 128 in _store_template_info
File "/venv-path/django/dispatch/dispatcher.py", line 193 in <listcomp>
File "/venv-path/django/dispatch/dispatcher.py", line 193 in send
File "/venv-path/django/test/utils.py", line 106 in instrumented_test_render
File "/venv-path/django/template/base.py", line 207 in render
File "/venv-path/django/template/backends/django.py", line 66 in render
File "/venv-path/django/template/loader.py", line 68 in render_to_string
File "/venv-path/wagtail/wagtailcore/blocks/base.py", line 259 in render
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 377 in __html__
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 380 in __str__
File "/venv-path/django/utils/encoding.py", line 76 in force_text
File "/venv-path/debug_toolbar/panels/templates/panel.py", line 128 in _store_template_info
File "/venv-path/django/dispatch/dispatcher.py", line 193 in <listcomp>
File "/venv-path/django/dispatch/dispatcher.py", line 193 in send
File "/venv-path/django/test/utils.py", line 106 in instrumented_test_render
File "/venv-path/django/template/base.py", line 207 in render
File "/venv-path/django/template/backends/django.py", line 66 in render
File "/venv-path/django/template/loader.py", line 68 in render_to_string
File "/venv-path/wagtail/wagtailcore/blocks/base.py", line 259 in render
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 377 in __html__
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 380 in __str__
File "/venv-path/django/utils/encoding.py", line 76 in force_text
File "/venv-path/debug_toolbar/panels/templates/panel.py", line 128 in _store_template_info
File "/venv-path/django/dispatch/dispatcher.py", line 193 in <listcomp>
File "/venv-path/django/dispatch/dispatcher.py", line 193 in send
File "/venv-path/django/test/utils.py", line 106 in instrumented_test_render
File "/venv-path/django/template/base.py", line 207 in render
File "/venv-path/django/template/backends/django.py", line 66 in render
File "/venv-path/django/template/loader.py", line 68 in render_to_string
File "/venv-path/wagtail/wagtailcore/blocks/base.py", line 259 in render
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 377 in __html__
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 380 in __str__
File "/venv-path/django/utils/encoding.py", line 76 in force_text
File "/venv-path/debug_toolbar/panels/templates/panel.py", line 128 in _store_template_info
File "/venv-path/django/dispatch/dispatcher.py", line 193 in <listcomp>
File "/venv-path/django/dispatch/dispatcher.py", line 193 in send
File "/venv-path/django/test/utils.py", line 106 in instrumented_test_render
File "/venv-path/django/template/base.py", line 207 in render
File "/venv-path/django/template/backends/django.py", line 66 in render
File "/venv-path/django/template/loader.py", line 68 in render_to_string
File "/venv-path/wagtail/wagtailcore/blocks/base.py", line 259 in render
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 377 in __html__
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 380 in __str__
File "/venv-path/django/utils/encoding.py", line 76 in force_text
File "/venv-path/debug_toolbar/panels/templates/panel.py", line 128 in _store_template_info
File "/venv-path/django/dispatch/dispatcher.py", line 193 in <listcomp>
File "/venv-path/django/dispatch/dispatcher.py", line 193 in send
File "/venv-path/django/test/utils.py", line 106 in instrumented_test_render
File "/venv-path/django/template/base.py", line 207 in render
File "/venv-path/django/template/backends/django.py", line 66 in render
File "/venv-path/django/template/loader.py", line 68 in render_to_string
File "/venv-path/wagtail/wagtailcore/blocks/base.py", line 259 in render
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 377 in __html__
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 380 in __str__
File "/venv-path/django/utils/encoding.py", line 76 in force_text
File "/venv-path/debug_toolbar/panels/templates/panel.py", line 128 in _store_template_info
File "/venv-path/django/dispatch/dispatcher.py", line 193 in <listcomp>
File "/venv-path/django/dispatch/dispatcher.py", line 193 in send
File "/venv-path/django/test/utils.py", line 106 in instrumented_test_render
File "/venv-path/django/template/base.py", line 207 in render
File "/venv-path/django/template/backends/django.py", line 66 in render
File "/venv-path/django/template/loader.py", line 68 in render_to_string
File "/venv-path/wagtail/wagtailcore/blocks/base.py", line 259 in render
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 377 in __html__
File "/venv-path/wagtail/wagtailcore/blocks/stream_block.py", line 380 in __str__
File "/venv-path/django/utils/encoding.py", line 76 in force_text
File "/venv-path/debug_toolbar/panels/templates/panel.py", line 128 in _store_template_info
File "/venv-path/django/dispatch/dispatcher.py", line 193 in <listcomp>
File "/venv-path/django/dispatch/dispatcher.py", line 193 in send
File "/venv-path/django/test/utils.py", line 106 in instrumented_test_render
File "/venv-path/django/template/base.py", line 207 in render
...
Thread 0x00007f5d4bcb3700 (most recent call first):
File "/usr/lib64/python3.5/selectors.py", line 376 in select
File "/usr/lib64/python3.5/socketserver.py", line 232 in serve_forever
File "/venv-path/django/core/servers/basehttp.py", line 174 in run
File "/venv-path/django/core/management/commands/runserver.py", line 149 in inner_run
File "/venv-path/django/utils/autoreload.py", line 227 in wrapper
Thread 0x00007f5d61887740 (most recent call first):
File "/venv-path/django/utils/autoreload.py", line 281 in reloader_thread
File "/venv-path/django/utils/autoreload.py", line 298 in python_reloader
File "/venv-path/django/utils/autoreload.py", line 332 in main
File "/venv-path/django/core/management/commands/runserver.py", line 110 in run
File "/venv-path/django/core/management/commands/runserver.py", line 101 in handle
File "/venv-path/django/core/management/base.py", line 330 in execute
File "/venv-path/django/core/management/commands/runserver.py", line 62 in execute
File "/venv-path/django/core/management/base.py", line 283 in run_from_argv
File "/venv-path/django/core/management/__init__.py", line 355 in execute
File "/venv-path/django/core/management/__init__.py", line 363 in execute_from_command_line
File "manage.py", line 15 in <module>
Aborted
Сейчас я нормально работаю с версией 1.7, но не знаю, с чего начать вникать в эту проблему. Есть идеи, советы или, надеюсь, решения? Заранее спасибо.
Я могу подтвердить ту же проблему при использовании DDT 1.8 с Django 1.8.
Я видел ту же проблему - она возникла у меня при использовании блока StreamField, в котором указан шаблон. Добавление этого шаблона в конфигурацию панели инструментов отладки SKIP_TEMPLATE_PREFIXES
было обходным решением. Насколько я помню (хотя это было некоторое время назад), основная проблема заключалась в том, что объект блока визуализировал шаблон в своем методе __str__
, что приводило к бесконечной рекурсии на панели TEMPLATES панели инструментов отладки.
@gasman Я подумал, что вы могли бы взглянуть на эту проблему.
Возможно, связано с https://github.com/wagtail/wagtail/issues/2874 ...?
Я испытал то же самое с DDT 1.8, Django 1.11.2 и Wagtail 1.10.1.
Воспроизведено с помощью Python 3.6, 3.6.1 и 3.7a
После некоторого расследования в Panel.py:128 создается бесконечный цикл, в случае с value
здесь может быть StructValue, строковое представление которого на самом деле является рендерингом шаблона, который запускает сигнал template_rendered
.
Я исправил его, чтобы он работал для тех, кто использует трясогузку. Патч здесь:
https://github.com/FlipperPA/django-debug-toolbar/commit/e68cfa509566bf5332c37f03c0fd9753a873d491
Я не думаю, что это должен быть пиар, потому что он специфичен для трясогузки.
Еще одно исправление для этого - исключение шаблонов, используемых StructBlock
из панели инструментов отладки. Например
class MyStructBlock(StructBlock):
...
class Meta:
...
template = 'myblocks/structblock.html'
И добавьте в файл settings.py
:
DEBUG_TOOLBAR_CONFIG = {
'SKIP_TEMPLATE_PREFIXES': ('django/forms/widgets/', 'admin/widgets/', 'myblocks/structblock.html'),
}
Из документа ДДТ для SKIP_TEMPLATE_PREFIXES
:
Шаблоны, начинающиеся с этих строк, пропускаются при сборе визуализированных шаблонов и контекстов. Виджеты форм на основе шаблонов по умолчанию пропускаются, потому что HTML-код панели может легко вырасти до сотен мегабайт с множеством полей формы и множеством опций.
Работает на меня.
У нас была эта проблема с Django Debug Toolbar 1.8 и django-floppyforms, и мы исправили эту проблему аналогичным образом:
DEBUG_TOOLBAR_CONFIG = {
'SKIP_TEMPLATE_PREFIXES': (
'django/forms/widgets/',
'admin/widgets/',
'floppyforms/'
),
'DISABLE_PANELS': {
'debug_toolbar.panels.redirects.RedirectsPanel',
'debug_toolbar.panels.redirects.TemplatesPanel'
},
}
Мы также решили отключить TemplatesPanel по умолчанию, потому что это сильно замедляло работу страницы. Загрузка страниц была в три раза медленнее по сравнению с Django Debug Toolbar 1.7.
Исправлено в https://github.com/wagtail/wagtail/pull/3738 - я думаю, это можно закрыть, так как это проблема с трясогузкой.
Спасибо @gasman!
Также влияет на django-el-pagination==3.1.0
, помогает добавление 'el_pagination/',
к SKIP_TEMPLATE_PREFIXES
.
Самый полезный комментарий
Возможно, связано с https://github.com/wagtail/wagtail/issues/2874 ...?