1

私はdjango-allauthをユーザ認証に使用しています。ログイン後、ユーザは/hello/prehome/にリダイレクトされなければなりません.'hello 'は私のアプリケーションの名前であり、プリハムのビューはユーザをホームページビューにリダイレクトし、ユーザIDと共にリダイレクトします。上記のURLをsettings.pyファイルのLOGIN_REDIRECT_URLに指定しました。私が登録したユーザー名とパスワードでログインする場合しかし、私は新しいユーザーを登録すると、ページがホームページために正常にリダイレクトされますが、ホームページビューの「他」セクションエラー -Django - NoReverseMatch at/<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,))) 

を得続けます実行される。

次のプロジェクトで(アプリケーションのサブディレクトリにある)urls.py

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(
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') 

プロジェクト -
から抜粋されていますフォルダ)

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')), 
] 

助けてください。

答えて

1

おそらく構文上の誤りでした。
返信文を
return HttpResponseRedirect(reverse('homepage',args=(request.user.id,)))から
return HttpResponseRedirect(reverse('homepage',args=[request.user.id]))
に変更しました。ただし、どこが間違っていたのか、この変更を組み込んだ後になぜ機能したのか分かりません。公式のdjangoのドキュメントは、関数にパラメータを渡すという以前の形式を使用しています。

0

Noneはregexpと一致しないため、ログインする必要があります。

+0

その場合、なぜ私はホームページにリダイレクトされず、このエラーに直面しますか?それは、エラーが 'return HttpResponseRedirect(reverse( 'homepage'、args =(user.id、))であることを示しています)'バックエンドではどういうことが起こっていますか? –