在使用Django提交表单后更新页面内容时保持url不变



我使用<form>标记构建了一个html表单,而不是使用内置的Django表单。表格要求填写姓名和年龄。我想做的是,在用户填写表单后,页面的url保持不变,而页面的内容则更改为显示名称和年龄。我该怎么做?

<html>
<head>
	<title>Form</title>
</head>
<body>
	<form method="post" action="aftersubmit">
		{% csrf_token %}
		<input placeholder="yourname" name="name">
		<br>
		<input placeholder="your age" name="age">
		<br>
		<input type="submit" value="Submit">
	</form>
</body>
</html>

from django.shortcuts import render,redirect
# Create your views here.
def formpage(request):
return render(request,'formhtml.html')
def aftersubmit(request):
name = request.POST['name']
age = request.POST['age']
dictionary = {
"name":name,
"age":age
}
print(dictionary)
return redirect('formpage')

我当前的代码保持url不变,但不修改页面的内容。

您可以在一个视图中实现行为:

检查请求类型

如果是读后年龄和姓名,如aftersubmit视图中所示。

def formpage(request):
if request.method == 'POST':
name = request.POST['name']
age = request.POST['age']
return render(request, 'formhtml.html', {'name': name, 'age':age}) # you could also swap the template if you want
else:
return render(request,'formhtml.html')

并使用包含名称和年龄的上下文呈现视图

在模板中检查年龄和/或姓名是否存在,并检查动作是否指向同一视图

{% if name %}
{{name}}  {{age}}
{% else %}
your form you already have
{% endif %}

文档中的示例:https://docs.djangoproject.com/en/3.0/topics/forms/

表单action需要url,因此{% url 'aftersubmit' %}应该可以工作但是,不触发刷新的表单不应该具有ACTION ATTRIBUTE或SUBMIT BUTTON因为submit事件是负责刷新的event。您要查找的是AJAX,您可以在此处找到答案,也可以使用Axios库调用您的视图。使用ajax会在前端做一些工作,因为现在您必须手动更改前端上的数据,与"刷新"之前的数据相比。

最新更新