2017-08-01 5 views
2

Ich habe folgendes Modell:NoReverseMatch Fehler Django

class UserPlaceReview(models.Model): 
    place = models.ForeignKey(PlaceReview) 
    review = models.TextField() 

    def __str__(self): 
     return self.review 

class PlaceReview(models.Model): 
    name  = models.CharField(max_length=150) 
    location = models.CharField(max_length=250) 
    image  = models.ImageField(upload_to = image_upload_location,null=True, blank=True) 
    category = models.ForeignKey(Categories) 
    slug =  models.SlugField() 
    timestamp = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 


    def __str__(self): 
     return self.name 

    def get_absolute_url(self): 
     return reverse("categories:detail", kwargs={"slug": self.slug}) 

In meinem Haupt urls.py habe ich die folgende URL:

url(r'^categories/', include('places.urls', namespace='categories')), 

und in meiner app urls.py habe ich die folgende URL :

url(r'^(?P<slug>[\w-]+)/review/$', user_place_review, name='user_review'), 

In einer Vorlage ich versuche, so etwas zu tun, was mir keine reverse Übereinstimmung Fehler gibt:

<a class="btn btn-primary btn-lg" href="{% url 'categories:user_review' %}">Write A Review!</a> 

Der Blick auf die URL verknüpft ist:

def user_place_review(request,slug): 
    place = PlaceReview.objects.get(slug=slug) 

    form = UserPlaceReviewForm(request.POST or None) 
    if form.is_valid(): 
     instance = form.save(commit=False) 
     review = form.cleaned_data['review'] 
     instance.place = place 
     instance.review = review 
     instance.save() 
     return redirect('/') 




    context = { 
    "form": form, 
    } 



    return render(request,"places/user_review.html", context) 

Ich bin nicht in der Lage, die Ursache des Fehlers zu finden.

Antwort

0

Sie müssen den Argumenten der URL einen Wert geben. Ihre Vorlage sollte so aussehen:

<a class="btn btn-primary btn-lg" href="{% url 'categories:user_review' slug='your_parameter' %}">Write A Review!</a> 

.

2

Ändern Sie diese Zeile

<a class="btn btn-primary btn-lg" href="{% url 'categories:user_review' %}">Write A Review!</a> 

zu

<a class="btn btn-primary btn-lg" href="{% url 'categories:user_review' slug=placereview_instance.slug %}">Write A Review!</a> 

Wo placereview_instance Ihr Modell ist object.You definiert URL user_review mit Slug Stichwort Argument in der urls.py Datei. Also Django sucht nach Schlüsselwort Argument Slug in dieser URL in der Vorlage.Es kann nicht das gleiche finden, so dass es keine Reverse-Match gefunden wird.

auch, wie Sie bereits definiert get_absolute_url in models.py .In der gleichen Art und Weise direkt eine andere Methode zur Überprüfung verwenden können und dann in den Vorlagen verwenden,

<a class="btn btn-primary btn-lg" href="{{ placereview_instance.get_review_absolute_url }}">Write A Review!</a> 
+0

Die instance.get_absolute_url nicht, wie ich habe nicht funktioniert (Slug)/Rezension hinzugefügt in meiner URL. Es wird mich auf der gleichen Seite halten und mich nicht zu/überprüfen – indexOutOfBounds

+0

Vielen Dank. Die andere Option, in der wir den Slug von unserer Instanz übergeben, funktioniert – indexOutOfBounds

+0

ok, erstelle eine weitere Methode für absolute URL der Überprüfung und es wird auch funktionieren – Aniket