【问题标题】:Django context processors appear not to be running in non-debug modeDjango 上下文处理器似乎没有在非调试模式下运行
【发布时间】:2014-03-01 19:31:35
【问题描述】:

我正在使用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 只能在调试模式下工作?

【问题讨论】:

    标签: django django-context browserid


    【解决方案1】:

    有趣的调试会话。在这里回答,因为它肯定会发生在其他人身上。

    完整的堆栈跟踪是这样的:

      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

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 2011-01-15
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      相关资源
      最近更新 更多