2016-11-15 5 views
0

Entweder bekomme ich einen seltsamen URL-Fehler in meinem Projekt oder ich vermisse etwas.NoReverseMatch bei django

Ich möchte die Profil-ID und zeigen Sie die Informationen in einer Vorlage namens "profile.html". Ganz einfach, nicht wahr?

Aber ich bekomme ein NoReverseMatch Fehler jedes Mal, wenn ich diese "Profil-URL" aufrufen.

Mein urls.py:

from django.conf.urls import url, include 
from django.contrib import admin 
from sugar import views 

urlpatterns = [ 
    url(r'^area51/', admin.site.urls), 
    url(r'^search/', views.search, name="search"), 
    url(r'^terms/', views.terms, name="terms"), 
    url(r'^thanks/', views.thanks, name="thanks"), 
    url(r'^create_user/', views.create_user, name="create_user"), 
    url(r'^profile_edit/', views.profile_edit, name="profile_edit"), 
    url(r'^upload_photos/', views.photo_upload, name="photo_upload"), 
    url(r'^recover/', views.recover_account, name="recover"), 
    url(r'^login/', views.log_user_in, name="login"), 
    url(r'^logout/', views.log_user_out, name="logout"), 
    url(r'^register/', views.register, name="register"), 
    url(r'^profile/(?P<sugarid>\d+)/$', views.profile, name="profile"), 
    url(r'^payment/', views.payment, name="payment"), 
    url(r'^home', views.home, name="home"), 
    url(r'^paypal/', include('paypal.standard.ipn.urls')), 
    url(r'^$', views.home, name="home"), 
] 

Meine Profilansicht:

def profile(request, sugarid): 
    if not request.user.is_authenticated(): 
     return redirect("home") 

    variables = {} 
    exists = SugarUser.objects.filter(user_id=sugarid) 
    if exists: 
     user = SugarUser.objects.get(user_id=sugarid) 
     if not check_payment(user): 
      return redirect("payment") 

     midList = [] 
     lastList = [] 

     queryPhotos = UserPhoto.objects.filter(user_id=sugarid).order_by("-id")[:8] 
     featuredPhoto = queryPhotos.values().first() 
     midPhotos = queryPhotos[4:] 
     for mid in midPhotos: 
      midList.append(mid) 
     if len(midList) < 4: 
      result = 4 - len(midPhotos) 
      for r in range(result): 
       midList.append(None) 

     lastPhotos = queryPhotos[1:4] 
     for last in lastPhotos: 
      lastList.append(last) 
     if len(lastList) < 3: 
      result = 3 - len(lastPhotos) 
      for r in range(result): 
       lastList.append(None) 
     variables['name'] = user.name 
     variables['status'] = user.status 
     variables['description'] = user.description 
     variables['whatyouwant'] = user.whatyouwant 
     variables['state'] = user.state 
     variables['city'] = user.city 
     if featuredPhoto: 
      variables['featuredPhoto'] = featuredPhoto['photo'] 
     else: 
      variables['featuredPhoto'] = None 
     variables['midPhotos'] = midList 
     variables['lastPhotos'] = lastList 
     variables['user'] = sugarid 

    return render(request, "profile.html", variables) 

Meine Login Benutzer Umleitung Ansicht:

def log_user_in(request): 
    if request.method == 'POST': 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None and user.is_active: 
      login(request, user) 
      return redirect("profile", kwargs={'sugarid': request.user.id}) 

Ich erhalte diesen Fehler immer:

django.core.urlresolvers.NoReverseMatch: Reverse for 'profile' with arguments '()' and keyword arguments '{'kwargs': {'sugarid': 24}}' not found. 1 pattern(s) tried: ['profile/(?P<sugarid>\\d+)/$'] 

Ich weiß nicht mehr, was ich zu tun, helfen :)

Antwort

3

Sie sugarid als kwarg passieren sollte sich. Dies sollte funktionieren:

return redirect("profile", sugarid=request.user.id) 
+0

Das funktionierte, aber jetzt Ich bin immer NoReverseMatch Fehler bei alle meine anderen URLs. Das nervt mich seit Tagen :( Jede einzelne URL er versucht das Muster "Profil", ich weiß nicht, warum lol – Storm

+0

können Sie ein wenig erarbeiten? – v1k45

+0

Nevermind, fand meinen Fehler, ich habe "header.html "Das war mit einer URL 'Profil' in allen Vorlagen, aber nicht übergeben ein Argument beim Rendern. Danke für Ihre Zeit Kumpel. :) – Storm

1

Sie Stellungs- oder Keyword-Argumente übergeben kann, wie es ist:

redirect("profile", sugarid=request.user.id) 

Überprüfen Sie die docs: redirect in Django

+0

Dies funktionierte als @ v1k45 sagte, aber jetzt bekomme ich NoReverseMatch Fehler bei allen anderen URLs . – Storm

+0

Bitte geben Sie mehr Details. Welche URLs scheitern und wann scheitern sie, aktualisieren Sie Ihre Frage oder fügen Sie eine neue hinzu! – aliasav

+0

Ich habe @ v1k45 kommentiert meinen eigenen Fehler zu beantworten, danke für die Antwort! – Storm