0

django_browseridアプリを使用しています。これが私の設定ファイルの一部です。

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
    "django.core.context_processors.request",
    'django_browserid.context_processors.browserid',
)

の場合、これはすべて正常に機能しDEBUG = Trueます。本番モードでは、何らかの理由で機能しません。スタック トレースの一部:

return context['browserid_css'](**kwargs)
KeyError: 'browserid_css'

そのため、コンテキスト プロセッサが実行されていないようです。それは私の推測です。動作中と失敗の唯一の違いはDEBUG=True/False.

デバッグすると、デバッグ モードでの値は次のcontextようになります。

[{'False': False, 'None': None, 'True': True}, [{'False': False, 'None': None, 'True': True}, {u'csrf_token': ... etc

本番モードでは:

[{'False': False, 'None': None, 'True': True}, {}]

リクエストがコンテキストから欠落しているようです。また、リクエストの一部ではなく、テンプレートがロードされたときにこれが発生しているように見えるため、リクエスト コンテキストがないことは驚くべきことではありません。

BrowserId がデバッグ モードでのみ機能するのはなぜですか?

4

1 に答える 1

0

興味深いデバッグ セッション。他の誰かに必ず起こるので、ここで答えます。

完全なスタック トレースは次のとおりです。

  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/django/views/defaults.py", line 41, in server_error
    return http.HttpResponseServerError(template.render(Context({})))
  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/django/template/base.py", line 140, in render
    return self._render(context)
  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/django/template/base.py", line 830, in render
    bit = self.render_node(node, context)
  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/django/template/base.py", line 844, in render_node
    return node.render(context)
  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/django/template/loader_tags.py", line 124, in render
    return compiled_parent._render(context)
  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/django/template/base.py", line 830, in render
    bit = self.render_node(node, context)
  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/django/template/base.py", line 844, in render_node
    return node.render(context)
  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/fancy_tag/__init__.py", line 101, in render
    return func(*args, **kwargs)
  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/django_browserid/templatetags/browserid.py", line 30, in browserid_css
    return context['browserid_css'](**kwargs)
  File "/Users/joe/Envs/folktunefinder/lib/python2.7/site-packages/django/template/context.py", line 57, in __getitem__
    raise KeyError(key)
KeyError: 'browserid_css'

ロギングを再構成した後、エラーが発生したようです。

SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): localhost:8000

このALLOWED_HOSTS設定は、プロダクション モードでのみ適用されます。Django はこのエラーをレンダリングしようとしており、リクエスト コンテキストのない BrowserID タグを含むテンプレートを何らかの形でレンダリングしていました。

したがって、このエラーが発生した場合は、まず を確認してくださいALLOWED_HOSTS

于 2014-03-01T22:00:05.523 に答える