我有以下模型:
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>
