【问题标题】:Django FormView dont redirect on successfull POSTDjango FormView 不会在成功的 POST 上重定向
【发布时间】:2020-03-05 10:49:14
【问题描述】:

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

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

感谢您的回答!

【问题讨论】:

  • 请发布您的代码,以便我们查看可能导致错误的原因
  • @KJTHoward 没有错误。我是一个普遍的问题。我应该发布一些代码吗?如果是,您需要哪个代码?
  • 使用普通的html表单,提交表单时页面会被重新加载或重定向。通常,浏览器会发出 POST 请求以将表单数据发送到服务器,然后服务器会发回一个新页面。如果你想制作一个典型的聊天应用程序,你将需要使用 JavaScript 和 AJAX。
  • 好的,感谢您的回答@FiddleStix。问题是,我想将消息存储在数据库中,我认为使用 Django 的 Form-Infrastructure 是最简单的,所以纯 Javascript/Ajax 是不可能的。我能做什么?
  • 如果您想使用 Django Forms,那么您将不得不忍受每当用户发送消息时重新加载页面。这可能是可以接受的。否则,我会使用例如Django Rest Framework 和一些 JavaScript,以便 Django 可以验证和保存您的所有消息,并且 JavaScript 可以处理前端。例如,请参阅this tuturial。

标签: python django django-views chat


【解决方案1】:

post 操作成功后,您可以简单地将 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 %}

【讨论】:

    猜你喜欢
    • 2016-12-27
    • 2019-08-04
    • 2022-11-06
    • 2012-03-05
    • 2015-03-09
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多