如何在django中的电子商务应用程序中呈现订单已完成页面

时间:2015-07-05 01:10:23

标签: django django-views

我目前正在构建一个电子商务风格的应用。我有一个处理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'))  

然而,由于消息的性质,它可以很好地工作,它会在页面刷新时消失。这是一种理想的行为还是有更好的方法来实现它?另外,我将如何将例如订单明细,总计等传递给模板?

1 个答案:

答案 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将显示在模板中。