我确信这是一个愚蠢的问题,但我试图理解窗体在django中是如何工作的,我对模板中的action属性和views.py中的httpresponseredirect感到困惑
我有以下模板:
<form action="/play_outcomes/output/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
以及以下视图:
def getinput(request):
if request.method == 'POST':
form = get_data(request.POST)
if form.is_valid():
down = form.cleaned_data['get_down']
ytg = form.cleaned_data['get_ytg']
yfog = form.cleaned_data['get_yfog']
return HttpResponseRedirect('/thanks/')
else:
form = get_data()
return render(request, 'play_outcomes/getinput.html', {'form': form})
最后是forms.py
class get_data(forms.Form):
get_down = forms.IntegerField(label = "Enter a down")
get_ytg = forms.IntegerField(label = "Enter yards to go")
get_yfog = forms.IntegerField(label = "Enter yards from own goal")
当我去play_outcomes/getinput
我的表单出现了。当我按下'submit'时,它会显示play_outcomes/output
页面,可能是因为<form action
变量指定了这个页面
不管怎样,我的问题是在检查了form.is_valid()
之后返回HttpResponseRedirect('/thanks/')
的目的是什么。这是TRUE
,因此它必须执行此代码。但这种回归似乎是多余的
有人能告诉我views.py
中的return
在做什么吗
尝试用
action=""
替换表单操作。一切都应该继续正常工作,因为视图同时处理GET请求(显示空表单)和POST请求(提交表单时处理)。当您按“提交”时,您的浏览器会将表单数据发送回与原始网页完全相同的位置。相同的URL、相同的视图(getinput()
)、相同的模板文件(play_outcomes/getinput.html
)通常,在
HttpResponseRedirect()
部分之前,您需要包含一些逻辑来保存表单的内容、向用户发送电子邮件、进行一些计算等。在这一点上,由于用户已经完成了对该页面的所有操作,因此您通常会将它们重定向到站点上的其他地方编辑:空操作
相关问题 更多 >
编程相关推荐