首页 > 解决方案 > Django FormView 在成功 POST 时不重定向

问题描述

我目前正在编写一个聊天应用程序。为了接受用户输入,我使用了一个表单,因此使用了一个 FormView 和一个自定义表单,遵循 Django-Docs。我必须设置一个success_url,但既不想在成功的POST上被重定向到另一个页面,也不想重新加载聊天页面。我该怎么做?

我已经阅读了以下帖子:Django FormView, Return without redirecting,但我并不真正理解答案的重点。我真的应该避免不重定向吗?如果没有,我真的可以用 JQuery-Ajax 实现吗?这与 Django 的 success_url 不冲突吗?

感谢您的回答!

标签: pythondjangodjango-viewschat

解决方案


成功发布操作后,您可以简单地将 URL 重定向到成功 url,例如:

success_url = '%s?success=1' % reverse('index_page')
return HttpResponseRedirect(success_url)

并在您的 html 模板中检查

{% if success == 1 %}
<h3> Data uploaded successfully</h3>
{% endif %}

或者

您可以使用 django 消息传递并覆盖 get_success_url 方法,例如:

from django.contrib import messages
def get_success_url(self):
    messages.add_message(self.request, messages.INFO, 'form submission success')
    return reverse('index_page'))

在模板上这样做:

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

推荐阅读