首页 > 解决方案 > 未找到任何参数的“详细信息”反向。尝试了 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>

当我点击添加评论时,它正在添加评论但不重定向到该页面。错误是:在此处输入图像描述

标签: pythondjangotemplatesweb

解决方案


您正在尝试重定向到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。


推荐阅读