我希望将用户重定向到我尝试添加的新创建帖子
return reverse("article-detail", args=(str(self.pk)))
,但是不起作用。
在命令提示符下显示“
django.urls.exceptions.NoReverseMatch:反转为“文章详细信息” 找不到带有参数'('4','3')'的参数。尝试了1种模式: ['article /(?P [0-9] +)$']
`
models.py
Class Post(models.Model):
title = models.CharField(max_length=255)
header_image = models.ImageField(null=True, blank=True, upload_to='images/')
title_tag = models.CharField(max_length=255)
author = models.ForeignKey(User, on_delete=models.CASCADE)
body = RichTextField(blank=True, null=True)
# body = models.TextField()
post_date = models.DateTimeField(auto_now_add=True)
category = models.CharField(max_length=255, default='coding')
snippet = models.CharField(max_length=255)
likes = models.ManyToManyField(User, related_name='blog_post')
def total_likes(self):
return self.likes.count
def __str__(self):
return self.title + ' | ' + str(self.author)
def get_absolute_url(self):
return reverse("article-detail", args=(str(self.pk)))
# return reverse("home")
urls.py
path('add_post/', AddPostView.as_view(), name="add_post"),
path('article/<int:pk>', ArticleDetailView.as_view(), name="article-detail"),
views.py
class AddPostView(CreateView):
model = Post
form_class = PostForm
template_name = 'add_post.html'
答案 0 :(得分:1)
您的get_absolute_url
方法不正确,相反,您可以使用kwargs
将参数提供为 dict 或将args
提供为 list 。对于您的情况,您应该使用我在上面的评论中提到的列表来完成此操作。
def get_absolute_url(self):
return reverse("article-detail", args=[self.pk])
答案 1 :(得分:0)
在您的addpostview类中,您可以指定成功网址。
`class AddPostView(CreateView):
model=Post
form_class=PostForm
template_name='add_post.html'
success_url='article/article_id/'`
答案 2 :(得分:0)
为什么不这样重写获取绝对URL。我猜是因为您将网址路径ID指定为int,并且将其转换为str以获得绝对网址
def get_absolute_url(self):
return reverse("article-detail", kwargs={pk:self.pk})