2017-08-01 107 views
2

我有以下型号:NoReverseMatch错误的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}) 

在我的主要urls.py,我有以下网址:

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

,并在我的应用程序urls.py,我有以下网址:

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

在模板中我试图做这样的事情,给了我一个没有反向匹配错误:

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

链接到网址的观点是:

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) 

我无法找到错误的原因。

回答

0

您必须给url的参数赋值。您的模板应该看起来像这样

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

2

改变这一行

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

哪里placereview_instance是型号object.You定义的URL user_review与在urls.py文件蛞蝓关键字参数。因此,Django正在寻找关键字参数slug在模板中的URL。它找不到相同的,所以它是抛没有找到反向匹配。

而且因为你已经在models.py定义get_absolute_url。在你可以直接使用其他方法进行审查,然后在模板中使用同样的方法,

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

,因为我有(塞的instance.get_absolute_url不起作用)/审查添加在我的网址。它会让我在同一页面,并不会带我/查看 – indexOutOfBounds

+0

非常感谢。我们通过从我们的实例slu works的其他选项工作 – indexOutOfBounds

+0

好吧,创建一个更多的方法绝对网址的审查,它也会工作 – Aniket