Django如何传递消息返回重定向?

时间:2015-10-03 10:27:44

标签: django django-views django-messages

我想在添加新评论后向帖子传递“成功”消息。以下是观点:

@login_required
def add_comment(request, post_slug):  

    p= Article.objects.get(slug=post_slug)
    cform = CommentForm(request.POST)
    if cform.is_valid():
        c = cform.save(commit = False)
        c.post = p
        c.body = cform.cleaned_data['body']
        c.author = request.user
        c.save()
            messages.success(request, "Comment was added") 
     else:
            messages.error(request, "Comment Invalid!") 

    return redirect('article.views.post_withslug', post_slug=post_slug)

def post_withslug(request, post_slug):
    post = Article.objects.get(slug = post_slug)
    comments = Comment.objects.filter(post=post)
    d = dict(post=post, comments=comments, form=CommentForm(), 
             user=request.user)
    d.update(csrf(request))
    return render_to_response("article/post.html", d)

问题是,重定向到发布新评论后,消息不会立即显示。但是,当我导航到其他页面时,它们会显示出来。

我想这是因为context_instance = RequestContext(request)没有正确地从评论转发到帖子视图。所以我尝试了其他重定向方法,例如render_to_responsredner(reverse(,但可以 无法解决问题。非常感谢您的提示。

1 个答案:

答案 0 :(得分:1)

问题出在post_withslug视图中。您实际上并未在该视图中使用RequestContext。 d是标准词典。因此,不会运行上下文处理器,也不会显示消息。

您应该使用render快捷方式而不是render_to_response

return render(request, "article/post.html", d)