python - 未找到任何参数的“详细信息”反向。尝试了 1 种模式:['product/(?P[-a-zA-Z0-9_]+)$']
问题描述
大家好,我在发表评论时遇到了这个错误,尽管评论正在发布,但它给了我这个错误并且不要去任何重定向 URL 我的 views.py 文件是:
class CommentCreateView(CreateView):
model = Comment
form_class = CommentForm
template_name = 'add-comment.html'
# fields = '__all__'
def form_valid(self, form):
form.instance.product = Product.objects.get(slug=self.kwargs['slug'])
return super().form_valid(form)
success_url = reverse_lazy('products:detail')
我的 urls.py 是:
urlpatterns = [
path('' , ProductListView.as_view(), name= "list"),
path('new/' , ProductCreateView.as_view() , name="product-create"),
path('<slug:slug>/update/' , ProductUpdateView.as_view() , name="product-update"),
path('<slug:slug>/delete/' , ProductDeleteView.as_view() , name="product-delete"),
path('<slug:slug>/comment' , CommentCreateView.as_view() , name="add-comment"),
path('<slug:slug>' , ProductDetailSlugView.as_view() , name="detail"),
]
我的 models.py 文件是:
class Comment(models.Model):
product=models.ForeignKey(Product , related_name="comments", on_delete=models.CASCADE)
name = models.CharField(max_length=255)
body=models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
# def get_absolute_url(self):
# return reverse("products:detail", kwargs={"slug" : self.slug})
def __str__(self):
return '%s - %s'%(self.product.title, self.name)
我的 add-comment.html 是:
{% extends "base.html"%}
{% load crispy_forms_tags%}
{% block content %}
<h2 class="text-center">comment here...</h2>
<div class="col-md-6 offset-md-3">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
{{form|crispy}}
</fieldset>
<button class="btn btn-secondary" >Add comment</button>
</form>
当我点击添加评论时,它正在添加评论但不重定向到该页面。错误是:在此处输入图像描述
解决方案
您正在尝试重定向到success_url = reverse_lazy('products:detail')
但没有任何参数(例如 slug)。
你应该使用:
class CommentCreateView(CreateView):
model = Comment
form_class = CommentForm
template_name = 'add-comment.html'
def form_valid(self, form):
form.instance.product = Product.objects.get(slug=self.kwargs['slug'])
return super().form_valid(form)
def get_success_url(self):
return reverse('detail', kwargs={'slug' : self.object.slug})
在这里,您可以获取 url,get_success_url
并且可以传入已创建实例的 slug。
推荐阅读
- asp.net-core-signalr - ASP.NET Core SignalR 客户端 WSS 问题
- go - 将 JSON 解组为 struct - 列表中的列表类型?
- reactjs - Material UI 1.3.1 文本字段没有 onKeyPress 方法
- r - 使用 R 和 purrr 使用带有 pmap 的列表列表连接多个数据帧
- javascript - 如何使用浅渲染而不是使用 NO_ERRORS_SCHEMA 编写 Angular Jasmine 简单的“应该创建”测试用例
- templates - 如何在 Nunjucks 的页面模板中设置宏变量
- ms-access - 使用表单更新列表框中的查询对象。(MS-访问)
- ballerina - 如何在 Ballerina 中仅获取电子邮件的实际正文内容
- sql - 在 SQL/PostgreSQL 中使用加权过滤器进行随机行选择
- javascript - 如何在电子应用程序中访问 appId