2017-08-01 2 views
2

je le modèle suivant:NoReverseMatch erreur 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}) 

Dans mon principal urls.py je l'adresse suivante:

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

et dans mon application urls.py je l'adresse suivante :

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

Dans un modèle que je suis en train de faire quelque chose comme ce qui me donne un pas d'erreur de correspondance inversée:

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

La vue liée à l'url est:

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) 

Je suis incapable de trouver la cause de l'erreur.

Répondre

0

Vous devez donner une valeur aux arguments de l'URL. votre modèle doit ressembler à ceci:

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

.

2

Modifier cette ligne

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

à

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

Où placereview_instance est votre modèle défini object.You URL de user_review avec l'argument de mot-clé slug dans le fichier urls.py. Donc Django recherche un argument slug dans l'URL du template. Il ne peut pas trouver la même chose, donc il lance No reverse match found.

également que vous avez déjà défini get_absolute_url dans models.py .Dans la même façon que vous pouvez directement utiliser une autre méthode pour examen et ensuite utiliser dans les modèles,

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

Le instance.get_absolute_url ne fonctionne pas comme je l'ai (limace)/avis ajouté dans mon URL. Il me gardera sur la même page et ne m'amènera pas à/revoir – indexOutOfBounds

+0

Merci beaucoup. L'autre option dans laquelle nous passons le slug de notre instance fonctionne – indexOutOfBounds

+0

ok, créez une autre méthode pour l'URL absolue de révision et cela fonctionnera aussi – Aniket