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 回答