模板渲染期间出现Django Allauth错误:NoReverseMatch at / accounts / login /

时间:2015-05-21 16:45:45

标签: python django facebook-login django-allauth

我坚持这个烦人的问题,如果有人能提出一些实际有用的建议,我将不胜感激。我已经在StackOverflow中搜索了类似的问题,并意识到所提出的解决方案都不适用于我。 我在Python和Django更新之后开始收到此错误(在更新之前一切正常)。现在,当我尝试打开登录页面时,我看到了这个例外:

NoReverseMatch at /accounts/login/
Reverse for 'facebook_login_by_token' with arguments '()' and keyword     arguments '{}' not found. 0 pattern(s) tried: []
Request Method: GET
Request URL:    http://localhost:8000/accounts/login/
Django Version: 1.8.2
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'facebook_login_by_token' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Exception Location: D:\Python_3_4_3\lib\site-packages\django\core\urlresolvers.py in _reverse_with_prefix, line 496
Python Executable:  D:\Python_3_4_3\python.exe
Python Version: 3.4.3
Python Path:    
['D:\\Django\\dentstudio',
'C:\\Windows\\system32\\python34.zip',
'D:\\Python_3_4_3\\DLLs',
'D:\\Python_3_4_3\\lib',
'D:\\Python_3_4_3',
'D:\\Python_3_4_3\\lib\\site-packages']
Server time:    Чт, 21 Май 2015 18:23:57 +0200

这些是我的项目设置:

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'home',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook',
'appointment',
'staff',
'job',
'news',
'articles',)


MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',)

TEMPLATE_PATH = os.path.join(BASE_DIR, 'templates')

TEMPLATE_DIRS = ( 
TEMPLATE_PATH,)

TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request",    
"allauth.account.context_processors.account",
"allauth.socialaccount.context_processors.socialaccount",)

AUTHENTICATION_BACKENDS = (
# Needed to login by username in Django admin, regardless of `allauth`
"django.contrib.auth.backends.ModelBackend",
# `allauth` specific authentication methods, such as login by e-mail
"allauth.account.auth_backends.AuthenticationBackend")

SOCIALACCOUNT_QUERY_EMAIL = True
SOCIALACCOUNT_PROVIDERS = {
'facebook': {
    'SCOPE': ['email', 'publish_stream'],
    'METHOD': 'js_sdk'  }}

SITE_ID=7

这是引发异常的模板:

In template D:\Django\dentstudio\templates\socialaccount\snippets\login_extra.html, error at line 3

1   {% load socialaccount %}
2   
3   {% providers_media_js %}

我的urls.py:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from home import views
from django.conf import settings

urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^home/', include('home.urls')),
url(r'^appointment/', include('appointment.urls')),
url(r'^people/', include('staff.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^inside/', views.inside, name='inside'),
url(r'^chat/', views.chat, name='chat'),
url(r'^accounts/', include('allauth.urls')),
url(r'^job/', include('job.urls')),
url(r'^news/', include('news.urls')),
url(r'^prices/', views.prices, name='prices'),
url(r'^services/', views.services, name='services'),
url(r'^contacts/', views.contacts, name='contacts'),
url(r'^articles/', include('articles.urls')),

if settings.DEBUG:
  urlpatterns += patterns(
    'django.views.static',
    (r'^media/(?P<path>.*)',
    'serve',
    {'document_root': settings.MEDIA_ROOT}), )

我的allauth urls.py:

from django.conf.urls import url, patterns, include
from home import views

try:
import importlib
except ImportError:
from django.utils import importlib

from allauth.socialaccount import providers

from . import app_settings

urlpatterns = patterns('', url('^', include('allauth.account.urls')),     url(r'^profile/', views.profile, name='profile'),)

if app_settings.SOCIALACCOUNT_ENABLED:
urlpatterns += patterns('', url('^social/',
                                include('allauth.socialaccount.urls')))

for provider in providers.registry.get_list():
try:
    prov_mod = importlib.import_module(provider.package + '.urls')
except ImportError:
    continue
prov_urlpatterns = getattr(prov_mod, 'urlpatterns', None)
if prov_urlpatterns:
    urlpatterns += prov_urlpatterns

我已经在考虑为facebook授权安装另一个应用程序,因为只能处理这个令人愤怒的异常。请帮帮忙,谢谢!

1 个答案:

答案 0 :(得分:1)

我和你有同样的问题。经过一些激烈的调试后,似乎在我的制作环境中我没有安装请求。 当导入urls.py时(在views.py中导入),此包用于每个allauth.socialaccount.providers。*。

我必须提一下,当我进行GET和/ accounts /我的facebook网址不存在时。

所以你已经对此有了解释。

https://docs.djangoproject.com/en/dev/ref/urlresolvers/#django.core.urlresolvers.reverse

“作为计算哪些URL名称映射到哪些模式的一部分,reverse()函数必须导入所有URLconf文件并检查每个视图的名称。这涉及导入每个视图函数。如果有任何错误在导入任何视图函数时,它会导致reverse()引发错误,即使该视图函数不是您要反转的函数。

确保您在URLconf文件中引用的任何视图都存在,并且可以正确导入。不要包含引用您尚未编写的视图的行,因为这些视图不可导入。“

解决方案是安装请求包:pip install requests

主要思想在于上述文档说明。如果您收到该错误,则当您访问/ accounts /(在调试模式下)时,您可能无法看到错误的链接。因此,请尝试为您的应用调试urls.py。

使用django shell非常有效。