Реверс для 'post_detail' с аргументами '('',)' не найден. Попытка 1 шаблона(ов): ['(?P<slug>[-a-zA-Z0-9_]+)/\\Z']

получаю следующую ошибку при добавлении ссылки возврата назад в моем comment_delete.html:

Повтор для 'post_detail' с аргументами '('',)' не найден. Испробован 1 шаблон(ы): ['(?P[-a-zA-Z0-9_]+)/\Z']

Все работает без ссылки на возврат (удаление комментария). Хотелось бы узнать, что я делаю не так в моем comment_delete (href="{% url 'post_detail' post.slug %}") Go back

Спасибо :)

models.py:

class Post(models.Model):
title = models.CharField(
    max_length=200, unique=True,
    default=str(f'Fishing {datetime.today()}')[:24]
)
slug = models.SlugField(max_length=200, unique=True)
author = models.ForeignKey(
    User, on_delete=models.CASCADE, related_name='blog_posts'
)
featured_image = CloudinaryField('image', default='placeholder')
excerpt = models.TextField(blank=True)
updated_on = models.DateTimeField(auto_now=True)
content = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
status = models.IntegerField(choices=STATUS, default=1)
likes = models.ManyToManyField(
    User, related_name='blogpost_like', blank=True)

class Meta:
    ordering = ['-created_on']

def __str__(self):
    return self.title

def number_of_likes(self):
    return self.likes.count()

def get_absolute_url(self):
    return reverse('post_detail', kwargs={'slug': self.slug})

def save(self, *args, **kwargs):
    self.slug = slugify(self.title)
    return super().save(*args, **kwargs)


class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE,
                         related_name='comments')
author = models.ForeignKey(User, on_delete=models.CASCADE,
                           related_name='blog_comments')
body = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
approved = models.BooleanField(default=True)

class Meta:
    ordering = ['created_on']

def __str__(self):
    return f'Comment {self.body} by {self.author}'

views.py

class CommentDelete(LoginRequiredMixin,
                SuccessMessageMixin,
                UserPassesTestMixin,
                generic.DeleteView):

model = Comment
template_name = 'comment_delete.html'
success_message = "Comment Deleted"

def get_success_url(self):
    slug = self.kwargs['slug']
    return reverse_lazy('post_detail', kwargs={'slug': slug})

def delete(self, request, *args, **kwargs):
    messages.success(self.request, self.success_message)
    return super(CommentDelete, self).delete(request, *args, **kwargs)

def test_func(self):
    comment = self.get_object()
    if self.request.user == comment.author:
        return True
    return False

urls.py

path('<slug:slug>/comment-delete/<int:pk>', views.CommentDelete.as_view(),
     name='comment_delete'),

post_detail.html

{% if request.user == comment.author %}
<a href="{% url 'comment_delete' post.slug comment.pk %}">Delete Comment</a>
{% endif %}

comment_delete.html

<div class="form-group">
  <button class="btn btn-outline-danger" type="submit">Delete</button>
  <a class="btn btn-outline-secondary" href="{% url 'post_detail' post.slug %}">Go back</a>
 </div>

Вы пытаетесь передать slug объекта Post, который не существует: {% url 'post_detail' post.slug %}. Вам необходимо убедиться, что у вас нет ссылок на Post, которые уже были удалены.

Не уверен, что понимаю, я не хочу удалять комментарий в посте, поэтому я хочу вернуться к посту вместо этого. Если я сделаю только {% url 'post_detail' comment.pk %} я могу получить доступ к delete_comment.html, но ссылка для возврата назад не работает...

Вернуться на верх