Skip to main content
 首页 » 编程设计

python之NoReverseMatch 错误 Django

2024年10月01日30xiaohuochai

我有以下模型:

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:

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> 

链接到 url 的 View 是:

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) 

我找不到错误的原因。

请您参考如下方法:

改变这一行

 <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 是您的模型对象。您在 urls.py 文件中使用 slug 关键字参数定义了 user_review 的 URL。所以 Django 正在模板中的那个 url 中寻找关键字参数 slug。它找不到相同的,所以它抛出没有找到反向匹配。

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

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