我正在使用django-allauth进行用户身份验证。登录后,用户必须被重定向到/hello/prehome/
。'hello'是我的应用程序的名称,并且prehome的视图将用户重定向到主页视图以及用户ID。我在LOGIN_REDIRECT_URL
下的settings.py文件中指定了提到的url。但是,当我使用注册的用户名和密码登录时,我一直收到错误 -
NoReverseMatch at /hello/prehome/
Reverse for 'homepage' with arguments '(None,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['hello/homepage/(?P<user_id>[0-9]+)/$']
...
/app/hello/views.py in prehome
return HttpResponseRedirect(reverse('homepage',args=(user.id,)))
当我注册新用户时,页面会正常重定向到主页,但主页视图的“其他”部分会被执行。
以下是项目的片段 -
的 views.py
def register(request):
if request.POST:
form=RegistrationForm(request.POST)
if form.is_valid():
username=form.cleaned_data['username']
password=form.cleaned_data['password']
email=form.cleaned_data['email']
user=User.objects.create_user(username=username,password=password,email=email)
user.save()
user=auth.authenticate(username=username,password=password)
if user.is_active:
auth.login(request,user)
return HttpResponseRedirect(reverse('homepage',args=(request.user.id,)))
else:
form=RegistrationForm()
return render(request,'hello/registration/register.html',{'form':form,})
def prehome(request):
user=request.user
return HttpResponseRedirect(reverse('homepage',args=(user.id,)))
def homepage(request,user_id):
user=User.objects.get(id=user_id)
if request.user.is_authenticated():
if request.user.is_active:
return render(request,'hello/userprofile/homepage.html',{'user':user,})
else:
return render(request,'hello/userprofile/error.html')
urls.py(在app的子目录中)
from django.conf.urls import include, url
from . import views
urlpatterns=[
url(r'^prehome/$',views.prehome,name='prehome'),
url(r'^homepage/(?P<user_id>[0-9]+)/$',views.homepage,name='homepage'),
]
urls.py(在项目文件夹中)
from django.conf.urls import include, url
from django.contrib import admin
admin.autodiscover()
from hello import views
urlpatterns = [
url(r'^$',views.index,name='index'),
url(r'^admin/',include(admin.site.urls)),
url(r'^accounts/',include('allauth.urls')),
url(r'^hello/',include('hello.urls')),
]
请帮忙。
答案 0 :(得分:1)
这可能是一个语法错误。
我将返回声明从return HttpResponseRedirect(reverse('homepage',args=(request.user.id,)))
改为了return HttpResponseRedirect(reverse('homepage',args=[request.user.id]))
,这很有效。但是,我不明白它出了什么问题,为什么在合并这个变化后它才有效。官方django文档使用先前的参数传递给函数的格式。
答案 1 :(得分:0)
您必须登录,因为无法与正则表达式匹配。