下午好,当我尝试在 Wagtail CMS 提供的路由上使用 DJDT 1.8 时遇到堆栈溢出错误。 相同的路由/页面适用于 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,但是我不知道从哪里开始深入研究这个问题。 任何想法、建议或希望的解决方案? 提前致谢。
在 Django 1.8 中使用 DDT 1.8 时,我可以确认同样的问题。
我见过同样的问题——它是在使用指定模板的 StreamField 块时触发的。 将该模板添加到SKIP_TEMPLATE_PREFIXES
调试工具栏配置是一种解决方法。 我记得(虽然是前一段时间),根本问题是块对象在其__str__
方法中呈现模板,这导致调试工具栏的 TEMPLATES 面板中的无限递归。
@gasman我想你可能想看看这个问题。
我在 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
.
我已经对它进行了猴子修补以使其适用于使用 Wagtail 的人。 补丁在这里:
https://github.com/FlipperPA/django-debug-toolbar/commit/e68cfa509566bf5332c37f03c0fd9753a873d491
我不希望这应该是 PR,因为它是特定于 Wagtail 的。
另一个修补程序是从调试工具栏中排除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
DDT 文档:
收集呈现的模板和上下文时,将跳过以这些字符串开头的模板。 默认情况下会跳过基于模板的表单小部件,因为面板 HTML 可以轻松地增长到数百兆字节,其中包含许多表单字段和许多选项。
为我工作。
我们在 Django 调试工具栏 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 调试工具栏 1.7 相比,页面加载速度慢了三倍。
在https://github.com/wagtail/wagtail/pull/3738 中修复 - 我认为这可以关闭,因为这是一个 Wagtail 问题。
谢谢@gasman!
也会影响django-el-pagination==3.1.0
,将'el_pagination/',
到SKIP_TEMPLATE_PREFIXES
有所帮助。
最有用的评论
可能与https://github.com/wagtail/wagtail/issues/2874...有关?