Django:重启后“没有名为context_processors的模块”错误

时间:2015-09-28 17:23:01

标签: python django django-settings django-middleware

我有一个可以在我的电脑上运行的Django网站,并在加载后在我的服务器上工作。我注意到我的服务器有Django 1.6,我升级到1.8。

重新启动后,我网站上没有任何网页加载,我收到错误:

  

ImportError没有名为context_processors的模块

我阅读了关于Django和allauth的文档。 Django提到在1.8中,context_processors移动了,allauth在TEMPLATE_CONTEXT_PROCESSORS的{​​{1}}中不再需要特定的allauth标记。

Django:https://docs.djangoproject.com/en/1.8/ref/settings/

Allauth:https://django-allauth.readthedocs.org/en/latest/installation.html

其他人遇到这个?我是在正确的轨道上吗?我需要在设置中更改某些内容吗?我无法确定它是否是Django或allauth问题所以不确定从哪里开始。

感谢任何帮助!

回溯:

settings.py

5 个答案:

答案 0 :(得分:48)

我遇到了同样的问题,但我从1.9.1升级到1.10。我发现这里的设置有点不同。

这是1.9.1的代码

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.core.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},
]

这是1.10的代码

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},
]

django.core.context_processors.request在1.10中无效。删除它,代码运行良好。

答案 1 :(得分:13)

问题是在升级到Django 1.8之后,我根据需要在settings.py中没有TEMPLATES设置。我不太清楚为什么它使用Django服务器在我的电脑上工作。

从allauth docs中,我将其粘贴到我的设置文件中:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # Already defined Django-related contexts here

                # `allauth` needs this from django
                'django.template.context_processors.request',
            ],
        },
    },
]

并将旧TEMPLATE_DIRS设置的内容复制到TEMPLATES的DIRS定义中。最终结果如下:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # Already defined Django-related contexts here

                # `allauth` needs this from django
                'django.template.context_processors.request',
            ],
        },
    },
]

根据最近的allauth更新文档,现在需要在TEMPLATES设置中指定context_processors,而不是TEMPLATE_CONTEXT_PROCESSORS设置。

感谢Joey Wilhelm让我指出了正确的方向。

答案 2 :(得分:2)

只是一个提示:当回溯没有为您提供识别确切代码行所需的信息时;启用DEBUG模式并在浏览器中打开页面会很有帮助。这是一个很棒的小local_vars元素,你可以在回溯发生时看到局部变量状态。它可以超级方便!

(在我的情况下,它与allauth内的变化有关)

答案 3 :(得分:1)

就我而言,我必须删除settings.py中的以下行:

[...]
pushViewport(viewport(layout = grid.layout(3, 4)))
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
print(p1, vp = vplayout(1, 2:3))
print(p2, vp = vplayout(2, 1:2))
print(p3, vp = vplayout(2, 3:4))
print(p4, vp = vplayout(3, 1:2))
print(p5, vp = vplayout(3, 3:4))

我重新启动了服务器,之后我没有再看到错误。

答案 4 :(得分:0)

现在它已更新源:https://docs.djangoproject.com/en/1.11/ref/templates/upgrading/

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            # insert your TEMPLATE_DIRS here
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this
                # list if you haven't customized them:
                'django.contrib.auth.context_processors.auth',
                'django.template.context_processors.debug',
                'django.template.context_processors.i18n',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]