![](/img/trans.png)
[英]Django url end href error: Reverse for '' with arguments '('',)' and keyword arguments '{}' not found
[英]django-allauth returns error “Reverse … with arguments '()' and keyword arguments '{}' not found”
編輯:凱文下面的答案解決了我的問題。 原來是“ allauth不支持名稱空間”,所以我不應該在urls.py中引入它。
原始帖子:
我已經完全按照教程https://github.com/pennersr/django-allauth
安裝了django-allauth
我這里有一個非常基本的問題; 甚至在我加入社交集成之前,基本用戶登錄/退出頁面都無法正常工作。
通過導航到/ admin,我單擊了“注銷”,因此我不是登錄用戶。
現在,當我訪問/accounts/login
我會遇到此錯誤
NoReverseMatch at /accounts/login/
Reverse for 'account_signup' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Request Method: GET
Request URL: http://localhost:5000/accounts/login/
Django Version: 1.6.5
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'account_signup' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
問題:我是否需要修改默認的allauth views.py才能解決此問題?
如果相關,當我通過外殼嘗試時,這是相同的問題
(awe01)MoriartyMacBookAir13:getstartapp macuser$ python manage.py shell
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
>>> from django.core.urlresolvers import reverse
>>> reverse('account_signup')
2014-09-30 16:54:29,256 boto [DEBUG]:Using access key found in config file.
2014-09-30 16:54:29,256 boto [DEBUG]:Using secret key found in config file.
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/django/core/urlresolvers.py", line 532, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "/Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/django/core/urlresolvers.py", line 452, in _reverse_with_prefix
(lookup_view_s, args, kwargs, len(patterns), patterns))
NoReverseMatch: Reverse for 'account_signup' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
在過去一個小時的搜索中,我看不到我所缺少的東西。 應該開箱即用,對吧? 我看到默認的base.html似乎已經有了這一行, {% load url from future %}
確認一下,以下是我的主要settings.py的摘錄(在shareducate / settings.py文件夾中)
"""
"""
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
import dj_database_url
# from unipath import Path # that's from http://djangosteps.wordpress.com/2013/09/19/setting-up-django-allauth/
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
TEMPLATE_DEBUG = True
ALLOWED_HOSTS = []
TEMPLATE_CONTEXT_PROCESSORS = (
# from http://django-allauth.readthedocs.org/en/latest/installation.html
# Required by allauth template tags
"django.core.context_processors.request",
# allauth specific context processors
"allauth.account.context_processors.account",
"allauth.socialaccount.context_processors.socialaccount",
# and this due to error message
"django.contrib.auth.context_processors.auth",
)
AUTHENTICATION_BACKENDS = (
# http://django-allauth.readthedocs.org/en/latest/installation.html
# 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",
)
# Application definition
# auth and allauth settings
LOGIN_REDIRECT_URL = '/'
SOCIALACCOUNT_QUERY_EMAIL = True
SOCIALACCOUNT_PROVIDERS = {
'facebook': {
# 'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
'SCOPE': ['email', 'publish_stream'],
'METHOD': 'js_sdk', # instead of 'oauth2'
# 'LOCALE_FUNC': 'path.to.callable',
'VERIFIED_EMAIL': False
},
# 'google':
# { 'SCOPE': ['https://www.googleapis.com/auth/userinfo.profile'],
# 'AUTH_PARAMS': { 'access_type': 'online' } },
# 'linkedin':
# {'SCOPE': ['r_emailaddress'],
# 'PROFILE_FIELDS': ['id',
# 'first-name',
# 'last-name',
# 'email-address',
# 'picture-url',
# 'public-profile-url']},
#
}
# SOCIALACCOUNT_ENABLED = True # @MM completely made that up based on allauth urls.py and https://github.com/flashingpumpkin/django-socialregistration/issues/48
# more settings from allauth
# http://django-allauth.readthedocs.org/en/latest/configuration.html
ACCOUNT_PASSWORD_MIN_LENGTH = 5
# more suggestions from https://speakerdeck.com/tedtieken/signing-up-and-signing-in-users-in-django-with-django-allauth
# ACCOUNT_AUTHENTICATION_METHOD = "username"
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'storages', # http://django-storages.readthedocs.org/en/latest/
'polls',
'discover',
'hello',
'upload', # from https://github.com/Widen/fine-uploader-server/blob/master/python/django-fine-uploader-s3/settings.py
'south', # http://south.readthedocs.org/en/latest/tutorial/part1.html
# The Django sites framework is required
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
# ... include the providers you want to enable:
'allauth.socialaccount.providers.facebook',
'allauth.socialaccount.providers.linkedin',
'allauth.socialaccount.providers.twitter',
)
SITE_ID = 5 # this corresponds to "127.0.0.1:5000" since I use heroku's foreman start to run things locally
# Not sure about this
# check out https://searchcode.com/codesearch/view/263279/
# I looked at tables. Ran "select * from django_site and it showed that awedify.org was id num 2
# awedify.org # originally just the single character, 1
# that from http://django-allauth.readthedocs.org/en/latest/installation.html
# from http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
# Note I also specify boto in STATICFILES_STORAGE later down this file
# Added and removed when trying fineuploader
ADMINS = (
('Mark', 'm@domain.com'),
# ('Your Name', 'your_email@example.com'),
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
ROOT_URLCONF = 'shareducate.urls'
WSGI_APPLICATION = 'shareducate.wsgi.application'
ALLOWED_HOSTS = ['*']
TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates'),
'polls/templates/polls',
'upload/templates/upload',
# 'polls/templates/polls',
'messing/templates/messing',
'discover/templates/discover',
'allauth/templates/allauth',
# or see http://djangosteps.wordpress.com/2013/09/19/setting-up-django-allauth/
)
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
# 'django.template.loaders.eggs.Loader',
)
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# from http://stackoverflow.com/questions/21563227/django-allauth-example-errno-61-connection-refused
我已經修改了shareducate / urls.py url(r'^accounts/', include('allauth.urls', namespace='allauth')),
但是我還沒有修改allauth文件夾中的任何內容
注意:通過轉到/ admin,我可以以超級用戶身份登錄。 然后足夠確定,根據settings.py
,訪問/ accounts / login將我重定向到root /,如果我注釋掉該行, # LOGIN_REDIRECT_URL = '/'
那么就足夠確定我將按照http://stackoverflow.com/a/16956071/870121
定向到/accounts/profile/
http://stackoverflow.com/a/16956071/870121
現在,盡管我已經注銷(這是通過/ admin界面實現的),但是當我訪問/accounts/login
時,allauth程序似乎無法處理我
注意/allauth/templates/account/login.html看起來像這樣...我根本沒有編輯它
{% extends "account/base.html" %}
{% load i18n %}
{% load account %}
{% load url from future %}
{% block head_title %}{% trans "Sign In" %}{% endblock %}
{% block content %}
<h1>{% trans "Sign In" %}</h1>
{% if socialaccount.providers %}
<p>{% blocktrans with site.name as site_name %}Please sign in with one
of your existing third party accounts. Or, <a href="{{ signup_url }}">sign up</a>
for a {{site_name}} account and sign in below:{% endblocktrans %}</p>
<div class="socialaccount_ballot">
<ul class="socialaccount_providers">
{% include "socialaccount/snippets/provider_list.html" with process="login" %}
</ul>
<div class="login-or">{% trans 'or' %}</div>
</div>
{% include "socialaccount/snippets/login_extra.html" %}
{% else %}
<p>{% blocktrans %}If you have not created an account yet, then please
<a href="{{ signup_url }}">sign up</a> first.{% endblocktrans %}</p>
{% endif %}
<form class="login" method="POST" action="{% url 'account_login' %}">
{% csrf_token %}
{{ form.as_p }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
<a class="button secondaryAction" href="{% url 'account_reset_password' %}">{% trans "Forgot Password?" %}</a>
<button class="primaryAction" type="submit">{% trans "Sign In" %}</button>
</form>
{% endblock %}
猜測
(1)
基於此答案http://stackoverflow.com/a/13202435/870121
我認為我可能必須在allauth / accounts / views.py中修改第109行
84 class LoginView(RedirectAuthenticatedUserMixin,
85 AjaxCapableProcessFormViewMixin,
86 FormView):
87 form_class = LoginForm
88 template_name = "account/login.html"
89 success_url = None
90 redirect_field_name = "next"
91
92 def get_form_class(self):
93 return get_form_class(app_settings.FORMS, 'login', self.form_class)
94
95 def form_valid(self, form):
96 success_url = self.get_success_url()
97 return form.login(self.request, redirect_url=success_url)
98
99 def get_success_url(self):
100 # Explicitly passed ?next= URL takes precedence
101 ret = (get_next_redirect_url(self.request,
102 self.redirect_field_name)
103 or self.success_url)
104 return ret
105
106 def get_context_data(self, **kwargs):
107 ret = super(LoginView, self).get_context_data(**kwargs)
108 signup_url = passthrough_next_redirect_url(self.request,
109 reverse("account_signup"),
110 self.redirect_field_name)
111 redirect_field_value = self.request.REQUEST \
112 .get(self.redirect_field_name)
113 ret.update({"signup_url": signup_url,
114 "site": Site.objects.get_current(),
115 "redirect_field_name": self.redirect_field_name,
116 "redirect_field_value": redirect_field_value})
117 return ret
118
119 login = LoginView.as_view()
您會看到它具有reverse("account_signup")
,沒有多余的參數,我沒有編輯此參數,因為我認為allauth應該可以直接使用,並且願意通過修補來破壞事物
該行在完整的追溯錯誤中突出顯示。 追溯:
File "/Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
112. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/django/views/generic/base.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "/Users/macuser/Dropbox/code/heroku/awe01/getstartapp/allauth/account/views.py" in dispatch
62. **kwargs)
File "/Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
87. return handler(request, *args, **kwargs)
File "/Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/django/views/generic/edit.py" in get
161. return self.render_to_response(self.get_context_data(form=form))
File "/Users/macuser/Dropbox/code/heroku/awe01/getstartapp/allauth/account/views.py" in get_context_data
109. reverse("account_signup"),
File "/Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/django/core/urlresolvers.py" in reverse
532. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "/Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
452. (lookup_view_s, args, kwargs, len(patterns), patterns))
(2)SITE_ID對此很重要,還是僅對社會融合而言重要?
請告知從此處開始有意義的故障排除步驟。 預先感謝,M
讓我用一些調試技巧來給出這個答案,希望這些技巧在將來會很有用。
當您看到該特定的Django錯誤時,幾乎總是意味着您的urls.py
。 如此廣泛使用的軟件包具有影響這種基本用法的錯誤的可能性很小,因此在這種情況下,深入研究源代碼可能是浪費的精力。
您說您“完全按照教程”安裝了django-allauth
,但是當我將設置與文檔進行比較時,我看到了這種差異:
文檔: (r'^accounts/', include('allauth.urls'))
您: (r'^accounts/', include('allauth.urls', namespace='allauth'))
因此,您使用命名空間似乎出現了問題。
快速的Google搜索可以解決此問題 ,包作者在其中說明不支持命名空間。
因此,如果您擺脫了namespace
參數,一切都將按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.