你不能在没有安装的情况下添加消息django.contrib.messages.middleware.MessageMiddleware

问题描述:

我是Django的新手。 我想运行一个应用程序,我需要添加一个新的用户到管理员。服务器正在运行。当我输入新用户的信息并点击“保存”时,出现以下错误。我正在使用django-trunk。你不能在没有安装的情况下添加消息django.contrib.messages.middleware.MessageMiddleware

MessageFailure at /admin/auth/user/add/ 
You cannot add messages without installing 
django.contrib.messages.middleware.MessageMiddleware 

Request Method: POST 
Request URL: http://localhost:8000/admin/auth/user/add/ 
Django Version: 1.6.dev20130403090717 
Exception Type: MessageFailure 
Exception Value: You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware 

任何有关可能发生什么的想法?

+0

你在INSTALLED_APPS和Django的''有django.contrib.messages' .contrib.messages.middleware.MessageMiddleware'在MIDDLEWARE_CLASSES中? – alecxe 2013-04-06 22:40:30

+0

优秀!这工作。谢谢。 – user1867563 2013-04-07 02:22:03

+0

我正在安装一个来自2008年的软件包,我猜设置文件不是最新的。 – user1867563 2013-04-07 02:22:41

检查您是否有django.contrib.messagesINSTALLED_APPSdjango.contrib.messages.middleware.MessageMiddlewareMIDDLEWARE_CLASSES

我遇到了同样的错误。 您必须注意MIDDLEWARE_CLASSES中的中间件的顺序。 插入相应的中间件在final.Like此,

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

注意的顺序排列。

对我来说,问题是特定于单元测试。事实证明,一些中间件不会在某些类型的单元测试工作,这里更多的信息:

https://code.djangoproject.com/ticket/17971

这里:

Why don't my Django unittests know that MessageMiddleware is installed?

我的解决办法只是模拟出的这些测试的消息框架,可能有更好的解决方案(django测试客户端?)

可能你把一个错误的WSGI_request通常称为request作为参数到add_message()方法

检查它是否是

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

,而不是

MIDDLEWARE = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

元组的名称应该是MIDDLEWARE_CLASSES