1

Ich benutze django-allauth für die Benutzerauthentifizierung. Nach der Anmeldung muss der Benutzer zu /hello/prehome/ umgeleitet werden. "Hallo" ist der Name meiner App und die Ansicht für Pre-Home leitet den Benutzer zusammen mit einer Benutzer-ID zur Startseite. Ich habe die erwähnte URL in der Datei settings.py unter LOGIN_REDIRECT_URL angegeben. Allerdings, wenn ich mit einem registrierten Benutzernamen und Passwort anmelden, ich bekomme immer wieder die fehler-Django - NoReverseMatch at/<url>/nach Login

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

Wenn ich einen neuen Benutzer registrieren, wird die Seite normalerweise umgeleitet zur Startseite, sondern die ‚else‘ Abschnitt der Homepage-Ansicht wird ausgeführt.

Im Folgenden sind Auszüge aus dem projekt-

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 (im Unterverzeichnis 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 (in Projekt Ordner)

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

Bitte helfen Sie.

Antwort

1

Es war wahrscheinlich ein syntaktischer Fehler.
Ich änderte die Return-Anweisung von
return HttpResponseRedirect(reverse('homepage',args=(request.user.id,))) zu
return HttpResponseRedirect(reverse('homepage',args=[request.user.id]))
und es funktionierte.Wie auch immer, ich verstehe nicht, wo es schief gelaufen ist und warum hat es funktioniert, nachdem diese Änderung integriert. Die offizielle Django-Dokumentation verwendet das vorherige Format der Übergabe eines Parameters an eine Funktion.

0

Sie müssen angemeldet sein, da None nicht mit regexp übereinstimmt.

+0

In diesem Fall, warum bin ich nicht auf die Homepage umgeleitet und eher mit diesem Fehler konfrontiert? Es besagt, dass der Fehler bei 'return HttpResponseRedirect (reverse ('homepage', args = (user.id,))) 'Was genau passiert im Backend? –