Нет модуля с именем django.contrib.auth при использовании вещей, которые перенаправляют

Я получаю ImportError "No module named django.contrib.auth" как при попытке использовать функцию django.shortcuts redirect, так и при попытке использовать:

(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}),

Я полагаю, что не может быть совпадением, что единственное место, где я попадаю эту ошибку, - это места, в которых страница перенаправляется, но, возможно, это так. Я знаю, что пользователь фактически не выходит из системы, поэтому ошибка возникает, прежде чем вы даже попадете в любой код перенаправления.

Ниже мой файл urls.py.

import django.contrib.auth.views
from django.conf.urls.defaults import *
import django.contrib.auth

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('karma.views',
(r'^$', 'homepage'),
(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}),
(r"^opportunities/nearby$", 'draw_map'),


(r'^admin/', include(admin.site.urls)),
url(r'', include('social_auth.urls')),
(r'^profile/', include('karmup.profile.urls')),
)

Ответ 1

Вы смешиваете префиксы URL в своем urlpatterns.

urlpatterns = patterns('karma.views',
  (r'^$', 'homepage'),
  (r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}),
  (r"^opportunities/nearby$", 'draw_map'),
)

Django пытается найти представления относительно данного префикса URL в вашем случае 'karma.views'. Внутри этого модуля нет 'django.contrib.auth.views.logout', поэтому вы получаете ImportError.

Переместите URL выхода на второй блок, например:

urlpatterns += patterns('',
  (r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}),
)

Это должно решить вашу проблему.