Django-debug-toolbar: Djangoデバッグツールバー1.8を使用する場合のスタックオーバーフロー(1.7で正常に動作します)

作成日 2017年06月01日  ·  11コメント  ·  ソース: jazzband/django-debug-toolbar

こんにちは、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を実行しても問題ありませんが、この問題をどこから始めればよいのか途方に暮れています。 アイデア、アドバイス、またはうまくいけば解決策はありますか? 前もって感謝します。

最も参考になるコメント

おそらくhttps://github.com/wagtail/wagtail/issues/2874に関連しています...?

全てのコメント11件

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に無限ループが作成されましたvalueStructValueであり、文字列表現は実際には信号をトリガーするテンプレートレンダリングです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ができます。

このページは役に立ちましたか?
0 / 5 - 0 評価