📅  最后修改于: 2023-12-03 15:14:43.990000             🧑  作者: Mango
在 Django 中,当用户提交表单时,默认情况下,Django 会通过重定向将用户重定向到成功提交的页面。然而,有时候我们可能希望在提交表单后保持在同一页面,而不进行任何重定向。本文将介绍如何在 Django 中实现在提交时不重定向的方法。
一种常见的方法是使用 Ajax 来提交表单数据,并在提交后保持在同一页面。具体的步骤如下:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
$('#my-form').on('submit', function(event) {
event.preventDefault(); // 阻止表单默认的提交行为
var formData = $(this).serialize(); // 获取表单数据
$.ajax({
url: '/submit/', // 表单提交的 URL
type: 'post',
data: formData,
success: function(response) {
// 处理提交成功后的操作,例如显示成功消息
$('#result-message').text('提交成功!');
},
error: function(response) {
// 处理提交失败后的操作,例如显示错误消息
$('#result-message').text('提交失败,请重试!');
}
});
});
});
</script>
<form id="my-form" action="/submit/" method="post">
<!-- 表单字段 -->
<button type="submit">提交</button>
</form>
<div id="result-message"></div>
在上面的代码中,我们使用了 jQuery 的 Ajax 方法来发送异步请求。在成功或失败的回调函数中,可以根据服务器返回的响应结果进行相应的处理。
另一种处理在提交时不重定向的方法是使用 Django 的 FormView 类视图。这个视图类提供了一种更优雅的方法来处理表单的提交,并且可以轻松地进行自定义。
首先,在views.py
中定义一个继承自FormView
的视图类,并设置相应的表单类、模板和成功提交后的操作:
from django.views.generic.edit import FormView
from myapp.forms import MyForm
class MyFormView(FormView):
form_class = MyForm # 自定义的表单类
template_name = 'myapp/my_form.html' # 表单的模板文件
success_url = '/success/' # 成功提交后重定向的 URL
def form_valid(self, form):
form.save() # 保存表单数据
return super().form_valid(form)
然后,在urls.py
中将这个视图类与 URL 路径进行关联:
from django.urls import path
from myapp.views import MyFormView
urlpatterns = [
path('submit/', MyFormView.as_view(), name='my_form'),
]
最后,在表单的模板文件my_form.html
中,可以通过添加一些 JS 代码来阻止默认的表单提交行为:
<form id="my-form" action="{% url 'my_form' %}" method="post">
{% csrf_token %}
<!-- 表单字段 -->
<button type="submit">提交</button>
</form>
通过以上的设置,当用户提交表单时,页面不会发生重定向,而是通过 Ajax 或 Django 的 FormView 处理表单数据,并在提交成功后执行相应的操作。
以上是在 Django 中实现在提交时不重定向的两种方法,可以根据实际需求选择适合的方法来处理表单提交。