djang的表单工作原理

2024-05-18 20:36:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我确信这是一个愚蠢的问题,但我试图理解窗体在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在做什么吗


Tags: pyformplaydatagetreturnrequestaction
1条回答
网友
1楼 · 发布于 2024-05-18 20:36:36

尝试用action=""替换表单操作。一切都应该继续正常工作,因为视图同时处理GET请求(显示空表单)和POST请求(提交表单时处理)。当您按“提交”时,您的浏览器会将表单数据发送回与原始网页完全相同的位置。相同的URL、相同的视图(getinput())、相同的模板文件(play_outcomes/getinput.html

通常,在HttpResponseRedirect()部分之前,您需要包含一些逻辑来保存表单的内容、向用户发送电子邮件、进行一些计算等。在这一点上,由于用户已经完成了对该页面的所有操作,因此您通常会将它们重定向到站点上的其他地方

编辑:空操作

相关问题 更多 >

    热门问题