2014-03-01 70 views
0

我正在使用django_browserid應用程序。這是我的設置文件的一部分。Django上下文處理器似乎不在非調試模式下運行

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只能在調試模式下工作?

回答

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

相關問題