我目前正在构建一个电子商务风格的应用。我有一个处理POST数据的视图new_order(订单信息)。之后,它会将一个HttpResponseRedirect呈现为order_complete,它只会呈现order_complete.html模板。
将订单号传递给模板的最佳方法是什么。这是我做的:
messages.success(request, 'Your order number is %s ' % order.order_id)
return HttpResponseRedirect(reverse('orders:order_complete_url'))
然而,由于消息的性质,它可以很好地工作,它会在页面刷新时消失。这是一种理想的行为还是有更好的方法来实现它?另外,我将如何将例如订单明细,总计等传递给模板?
答案 0 :(得分:0)
Django的messages framework
允许我们在处理表单或其他类型的用户输入后向用户显示一次性通知消息。它将消息临时存储在一个请求中并检索它们以便在后续请求中显示(通常是下一个请求)
因此,当您刷新页面时,该消息将消失,并且不会再次显示。
您也可以使用session
存储要在后续请求中使用的变量。
例如:
request.session['order_number'] = order.order_id # set in session
return HttpResponseRedirect(reverse('orders:order_complete_url'))
这将在会话中设置order_number
。在这里,您还可以在order_complete_url
视图中设置所需的其他变量。
然后在order_complete_url
视图中,您可以通过以下方式访问order_number
order_number = request.session['order_number'] # retrieve order number from session
您可以将此order_number
传递给context
,然后在模板中显示。现在,当您刷新页面时,order_number
将显示在模板中。