1

我在 virtualenv 中使用 Django 1.5.1,在 OS X 10.8.4 上使用 Python 2.7。我在 Django 设置中从 更改DEBUG = TrueDEBUG = False,但出现错误:

Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/wsgiref/handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "/Users/kilroy/.virtualenvs/project_name/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 255, in __call__
    response = self.get_response(request)
  File "/Users/kilroy/.virtualenvs/project_name/lib/python2.7/site-packages/django/core/handlers/base.py", line 178, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "/Users/kilroy/.virtualenvs/project_name/lib/python2.7/site-packages/django/core/handlers/base.py", line 224, in handle_uncaught_exception
    return callback(request, **param_dict)
  File "/Users/kilroy/Sites/PYTHON/project_name/apps/common/views.py", line 436, in handler_500
    messages.error(request, '500 - Internal server error.')
  File "/Users/kilroy/.virtualenvs/project_name/lib/python2.7/site-packages/django/contrib/messages/api.py", line 102, in error
    fail_silently=fail_silently)
  File "/Users/kilroy/.virtualenvs/project_name/lib/python2.7/site-packages/django/contrib/messages/api.py", line 22, in add_message
    raise MessageFailure('You cannot add messages without installing '
MessageFailure: You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware

我使用不同的设置文件进行开发和生产,在我的开发机器上,我在/Users/kilroy/.virtualenvs/project_name/bin/postactivate文件中设置环境变量,如下所示:

export DJANGO_SETTINGS_MODULE=project_name.settings.local

我的base.py文件看起来像这样https://dpaste.de/avXmL/,我的local.py设置像这样https://dpaste.de/Z0PXv/

当我想禁用调试时为什么会发生这种情况,我如何追踪为什么会首先出现这个问题?

4

2 回答 2

1

当我在使用开发服务器时将 DEBUG 设置为 false 时,我有相同的堆栈跟踪。就我而言,它与 Django 的 ALLOWED_HOSTS 设置/检查有关。症状令人困惑,因为引发了导致错误的 SuspiciousOperation 异常。

如果我ALLOWED_HOSTS = ['localhost']在我的设置文件http://localhost:8000中有我的浏览器地址,一切都很好。但是,如果我直接使用 IP 地址,则会http://127.0.0.1:8000/出现此错误。

于 2013-11-27T12:59:17.487 回答
0

你能在shell上试试这个吗:

from django.conf import settings
print settings.MIDDLEWARE_CLASSES

如果你没有django.contrib.messages.middleware.MessageMiddleware在 middleware_classes 中看到,你应该添加它。

我猜你在开发过程中没有收到任何 500 错误,所以这条线使用messages.error(request, '500 - Internal server error.')从未执行过,所以你在 DEBUG=True 中没有遇到这个问题。

于 2013-07-11T12:05:12.930 回答