【问题标题】:NoReverseMatch Error DjangoNoReverseMatch 错误 Django
【发布时间】:2017-08-01 17:16:31
【问题描述】:

我有以下型号:

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>

链接到 url 的视图是:

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)

我无法找到错误的原因。

【问题讨论】:

    标签: python django reverse django-urls


    【解决方案1】:

    改变这一行

     <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。它找不到相同的,所以它抛出No reverse match found。

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

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

    【讨论】:

    • instance.get_absolute_url 不起作用,因为我在我的 url 中添加了 (slug)/review。它会让我保持在同一页面上,不会带我去 /review
    • 非常感谢。我们从实例传递 slug 的另一个选项有效
    • 好的,为评论的绝对网址再创建一种方法,它也可以工作
    【解决方案2】:

    您必须为 url 的参数赋值。你的模板应该是这样的

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

    【讨论】:

      猜你喜欢
      • 2015-10-24
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 2017-07-30
      • 2017-03-14
      • 2017-07-27
      相关资源
      最近更新 更多