【问题标题】:how can i redirect the user to the newly created post after creating a new post创建新帖子后如何将用户重定向到新创建的帖子
【发布时间】:2020-08-04 14:17:50
【问题描述】:

我希望用户被重定向到我尝试添加的新创建的帖子

return reverse("article-detail", args=(str(self.pk))) 但它不起作用。 在命令提示符下它说 `

django.urls.exceptions.NoReverseMatch: 'article-detail' 的反向 找不到参数“('4','3')'。尝试了 1 种模式: ['文章/(?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'

【问题讨论】:

  • 我试过了,但它显示没有要重定向到的 URL。在模型上提供一个 url 或定义一个 get_absolute_url 方法。
  • args 应该是一个项目列表。你能在你有reverse("article-detail"的地方添加你的url模式吗?
  • 我已经添加了网址
  • 但是没有!我的意思是链接到该名称article-detail 的网址。并添加完整的回溯......这就是我可以帮助你的方式

标签: python django django-models django-views


【解决方案1】:

您的get_absolute_url 方法不正确,相反,您可以使用kwargs 作为dictargs 作为list 提供参数。在您的情况下,您应该使用我在上面 cmets 中提到的列表来执行此操作。

def get_absolute_url(self):
    return reverse("article-detail", args=[self.pk])

【讨论】:

  • 老兄不是同性恋,但我爱你,我几乎放弃了,非常感谢,伙计
  • 你能告诉我为什么我的代码不起作用,因为我正在关注一个来自 youtube 的人,他这样写它并且它对他有用
  • 他可能被使用了一个元组来提供参数。 -> 末尾加逗号:(self.pk, )
【解决方案2】:

在您的 addpostview 类中,您可以指定您的成功网址。

 `class AddPostView(CreateView):
    model=Post
    form_class=PostForm
    template_name='add_post.html'
    success_url='article/article_id/'`
    

【讨论】:

  • 可以发帖子详情视图类吗?
【解决方案3】:

为什么不像这样重写get absolute url。我猜是因为您将 url 路径 id 指定为 int 并且您在获取绝对 url 时将其转换为 str

def get_absolute_url(self):
    return reverse("article-detail", kwargs={pk:self.pk})
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    相关资源
    最近更新 更多