django - Django 错误 - /listings/1 处的 NoReverseMatch。未找到带有参数“(”,)“的“添加评论”的反向操作。(创建评论部分)
问题描述
我是 Django 新手,我认为我在设置动态 url 时遇到了问题。我正在创建一种向页面添加评论的方法,称为列表。在我添加任何有关评论的内容之前,列表页面加载良好。当我尝试转到该特定列表时,我收到错误消息:
“/listings/1 处的 NoReverseMatch。未找到带有参数 '('',)' 的 'addcomment' 的反向。尝试了 1 种模式:['addcomment/(?P[0-9]+)$']”
感谢您提供任何帮助,因为即使在查看文档之后,我也无法理解动态 url 如何工作/如何创建它们。我认为我的 html 页面也可能存在问题,例如使用 url 提取正确信息等。
视图.py
def addcomment(request, id):
obj = Comments()
obj.comment = request.POST.get("comment")
obj.user = request.user.username
obj.listingid = id
obj.save()
# returning the updated content
print("displaying comments")
comments = Comments.objects.filter(listingid=id)
product = Listings.objects.filter(id=id)
return render(request, "auctions/listing.html", {
"product": product,
"comments": comments
})
def listingpage(request, id):
comments = Comments.objects.get(listingid=id)
item = Listings.objects.get(id=id)
return render(request, "auctions/listing.html", {
"i": item,
"id": id,
"comments": comments,
})
网址.py
urlpatterns = [
path("", views.index, name="index"),
path("login", views.login_view, name="login"),
path("logout", views.logout_view, name="logout"),
path("register", views.register, name="register"),
path("auctions/create", views.create, name="create"),
path("listings/<int:id>", views.listingpage, name="listingpage"),
path("addcomment/<int:id>", views.addcomment, name="addcomment"),
]
模型.py
class Listings(models.Model):
title = models.CharField(max_length=64)
description = models.TextField(max_length=250)
starting_bid = models.IntegerField()
link = models.CharField(max_length=100, default=None, blank=True,
null=True)
class Comments(models.Model):
comment = models.CharField(max_length=250, default='')
user = models.CharField(max_length=64)
listingid = models.IntegerField()
添加评论的列表页面的 HTML 文件的一部分:
<h2 class="card-title h2">ADD COMMENT</h2>
<form action="{% url 'addcomment' product.id %}"
method="POST">
{% csrf_token %}
<div class="form-group">
<textarea class="form-control" name="comment"
rows="4" placeholder="Your Comment"></textarea>
</div>
<p align="justify"><input class="btn btn-primary" type="submit" value="Submit"></p>
</form>
</div>
{% endblock %}
解决方案
问题是您没有将具有名称的变量传递product
给listing.html
模板,只有i
,id
和comments
. 因此,您应该将其作为产品传递:
def listingpage(request, id):
comments = Comments.objects.get(listingid=id)
item = Listings.objects.get(id=id)
return render(request, 'auctions/listing.html', {
'i': item,
'id': id,
'product': item, # ← pass product
'comments': comments,
})
推荐阅读
- c++ - 读取系统内存的权限不足
- python-3.x - 使用 Requests-HTML 仅从父标签中提取文本
- c - 在 cygwin 中运行程序时,意外标记 `(' 附近出现语法错误
- reactjs - Is there anyway to dynamically add a child to a JSX element?
- debugging - Intellij: how to open a library java source and set a breakpoint for debugging?
- java - How to make IntelliJ color preview recognize a custom Color class?
- c# - How to return value of items in Listbox to Textbox
- excel - 如何格式化此 VBA 电子邮件
- python - Python DataFrame 选择行 3 年
- python - urllib3 和 curl 不适用于某些网站,但浏览器可以使用