Django 如何在 return 重定向中传递消息?
Django how to pass message in return redirect?
我想在添加新评论后向 post 传递一条 'success' 消息。以下是观点:
@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)
问题是,在使用新评论重定向到 post 后,消息不会立即显示。但是,当我导航到其他页面时,它们会显示。
我想这是因为 context_instance = RequestContext(request)
没有从评论正确地传达给 post 观点。所以我尝试了其他重定向方法,如 render_to_respons
和 redner(reverse(
,但可以
无法解决问题。非常感谢您的提示。
问题出在 post_withslug
视图中。您实际上并没有在该视图中使用 RequestContext。 d
是标准词典。因此,上下文处理器将不会 运行,消息也不会出现。
您应该使用 render
快捷方式而不是 render_to_response
:
return render(request, "article/post.html", d)
我想在添加新评论后向 post 传递一条 'success' 消息。以下是观点:
@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)
问题是,在使用新评论重定向到 post 后,消息不会立即显示。但是,当我导航到其他页面时,它们会显示。
我想这是因为 context_instance = RequestContext(request)
没有从评论正确地传达给 post 观点。所以我尝试了其他重定向方法,如 render_to_respons
和 redner(reverse(
,但可以
无法解决问题。非常感谢您的提示。
问题出在 post_withslug
视图中。您实际上并没有在该视图中使用 RequestContext。 d
是标准词典。因此,上下文处理器将不会 运行,消息也不会出现。
您应该使用 render
快捷方式而不是 render_to_response
:
return render(request, "article/post.html", d)