こんにちは、WagtailCMSが提供するルートでDJDT1.8を使用しようとすると、スタックオーバーフローエラーが発生します。 同じルート/ページがDJDT1.7で機能します。 Django1.11.2とWagtail1.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を実行しても問題ありませんが、この問題をどこから始めればよいのか途方に暮れています。 アイデア、アドバイス、またはうまくいけば解決策はありますか? 前もって感謝します。
DDT1.8をDjango1.8で使用した場合も、同じ問題を確認できます。
同じ問題が発生しました。テンプレートを指定したStreamFieldブロックを使用したときにトリガーされました。 そのテンプレートをSKIP_TEMPLATE_PREFIXES
デバッグツールバー構成に追加することは回避策でした。 私が思い出したように(少し前ですが)、根本的な問題は、ブロックオブジェクトがその__str__
メソッドでテンプレートをレンダリングすること
@gasmanこの問題を見てみたいと思いました。
おそらくhttps://github.com/wagtail/wagtail/issues/2874に関連しています...?
私はDDT1.8、Django 1.11.2、Wagtail1.10.1でも同じことを経験しました。
Python 3.6、3.6.1、3.7aで再現
調査の結果、 panels.py:128に無限ループが作成されましたvalue
はStructValueであり、文字列表現は実際には信号をトリガーするテンプレートレンダリングですtemplate_rendered
。
Wagtailを使用している人のために動作させるために、モンキーパッチを適用しました。 パッチはここにあります:
https://github.com/FlipperPA/django-debug-toolbar/commit/e68cfa509566bf5332c37f03c0fd9753a873d491
これはWagtail固有のものであるため、PRになるとは思いません。
このための別の修正プログラムは、デバッグツールバーから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 Debug多くのツールバー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と比較して3倍遅くなりました。
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に関連しています...?