【问题标题】:Redirect to reload current page view after form POST表单 POST 后重定向以重新加载当前页面视图
【发布时间】:2017-02-28 05:18:53
【问题描述】:

在一个简单的博客应用程序中,当用户在一篇文章中访问时,推荐的方法是重定向到相同的可变路由或永久链接以显示新评论(在 django 中)?

urlpatterns = [
    ...
    url(r'^comments/(?P<post_id>[0-9]+)$', views.comments, name="thread"),
    url(r'^post/comment/$', views.post_comment, name="post_comment"),
]

在视图中,我可以使用request.get_full_path() 获取网址,但我认为与其剥离post_id,还有更好的方法将其传递给重定向。示例视图(但不正确):

def post_comment(request):

   author = User.objects.get(user=request.user)
   new_comment = request.POST.get('commentContent', None)
   parent_object = None
   comment = Comment.create(author=author,
                            new_comment=new_comment,
                            parent=parent_object)

   comment.save()
   return redirect('/comments/{}'.format(comment.post.id))

提交评论表单将记录:

[28/Feb/2017 05:21:33] "POST /post/comment/ HTTP/1.1" 302 0
[28/Feb/2017 05:21:33] "GET /comments/{{post_id}} HTTP/1.1" 200 44831

表单正确发布,但页面不会重新加载/重定向

谢谢

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    您可以使用反向重定向:

    from django.core.urlresolvers import reverse
    
    # at the end of your view
    redirect_to = reverse('blog:thread', kwargs={'post_id': post.id})
    return redirect(redirect_to)
    

    【讨论】:

    • 对我不起作用。它不会重新加载页面,即不会重新运行视图的 get 方法(我使用的是基于类的视图)。
    • 如果您使用无效的代码创建一个新问题会很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    相关资源
    最近更新 更多