新しいコンピュータで既存のDjangoプロジェクトを実行しようとしましたが、django-debug-toolbarに問題があります。それはJinja2と関係があるようです。ここでは、スタックトレースです:django-debug-toolbar: 'テンプレート'オブジェクトに 'engine'属性がありません
Traceback:
File "/path/to/myrepo/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
223. response = middleware_method(request, response)
File "/path/to/myrepo/env/local/lib/python2.7/site-packages/debug_toolbar/middleware.py" in process_response
120. panel.generate_stats(request, response)
File "/path/to/myrepo/env/local/lib/python2.7/site-packages/debug_toolbar/panels/templates/panel.py" in generate_stats
175. context_processors = self.templates[0]['context_processors']
Exception Type: AttributeError at /first/page/
Exception Value: 'Template' object has no attribute 'engine'
私は私のプロジェクトにJinja2のを統合するジャンゴ - Jinja2のを使っていますが、これは前に大丈夫働いたが、それは今、通常のDjangoテンプレートであることを、このtemplate
変数を期待しているようです。私のTEMPLATES
の設定では、Jinja2とDjangoTemplatesの両方が設定されています.Jinja2は特定の拡張子( 'tmpl')を使用してJinja2で使用されているテンプレートのみを使用し、その他はDjangoTemplatesバックエンドを通過できます。
Jinja2でdjangoデバッグツールバーを使用するとき、誰もこのエラーを見たことがありますか?私は必要に応じてさらに設定を投稿できます。
EDIT:要求されたとして、ここに私のテンプレート設定があります:
TEMPLATES = [
{
#'BACKEND': 'django.template.backends.jinja2.Jinja2',
'BACKEND': 'django_jinja.backend.Jinja2',
#'NAME': 'jinja2',
'DIRS': [
os.path.join(DEPLOY_PATH, 'templates')
],
'APP_DIRS': True,
'OPTIONS': {
'debug': DEBUG,
'match_extension': '.tmpl',
#'environment': 'jinja2.Environment',
'extensions': [
'jinja2.ext.with_',
'jinja2.ext.i18n',
'django_jinja.builtins.extensions.UrlsExtension',
'django_jinja.builtins.extensions.CsrfExtension',
'pipeline.templatetags.ext.PipelineExtension',
],
'context_processors': [
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request",
]
},
},
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(DEPLOY_PATH, 'templates')
],
'APP_DIRS': True,
'OPTIONS': {
'debug': DEBUG,
'context_processors': [
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request",
]
}
}
]
アップデート - 私はデバッグツールバーソースの小さなコード変更を行うことで、問題を「固定」しました:debug_toolbar/panels/templates/panel.py
にライン175を変更しますFrom:
template_dirs = self.templates[0]['template'].engine.dirs
へ:
if hasattr(self.templates[0]['template'], 'engine'):
template_dirs = self.templates[0]['template'].engine.dirs
elif hasattr(self.templates[0]['template'], 'backend'):
template_dirs = self.templates[0]['template'].backend.dirs
else:
raise RuntimeError("Couldn't find engine or backend for a template: {}",format(self.templates[0]['template']))
私はこれがなぜ機能するのか調べていません。(デバッグツールバー1.5とdjango-jinja 2.2.0の組み合わせでうまくいく人もいますが)Jinja2テンプレートにはbackend
属性があり、Djangoテンプレートにはengine
属性があります。どちらも同じもののために使用されているように見えます。