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

How to render order completed page in ecommerce app in django

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

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

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