这是我要寻找的功能——用户在默认页面上填写表单,索引.html. 当它被提交时,我收到一个POST请求,我将其内容添加到数据库中。接下来,我想加载一个新页面,其内容将取决于表单中的信息。在
这是我的实现——我在我的index(request)
函数中处理POST请求。我最初返回了一个HTTPResponseRedirect(navigation/route.html)
,但后来在搜索StackOverflow之后发现,不可能同时重定向和发送表单的内容。我通过返回render(request, 'navigation/route.html', {'form': form})
来解决这个问题。在
我只是担心,因为HTTPResponseRedirect
故意阻止用户传递请求后数据,这意味着我试图绕过结构限制可能是个坏主意。在
这是我的视图.py公司名称:
def index(request):
if request.method == 'POST':
# populate form with information from POST request
form = TripForm(request.POST)
if form.is_valid():
# input into database
trip_instance = Trip(**form.cleaned_data)
trip_instance.save()
# redirect
return render(request, 'navigation/route.html', {'form': form})
else:
# either request is not POST or form did not pass validation checks
form = TripForm
return render(request, 'navigation/index.html', {'form': form})
阻止这一点的并不是HttpResponseRedirect,而是HTTP本身的结构;302重定向告诉浏览器请求新页面,但保留POST字典。在
这并不是你不应该做你正在做的事情的原因。正如文档所解释的,在成功发布后,您应该始终执行实际的重定向,这样浏览器刷新不会导致表单被重新发布。在
您想要的方法是在重定向到的URL中传递trip ID,然后在该视图中查询它。或者,您可以在会话中保存该值。在
相关问题 更多 >
编程相关推荐