Django e-commerce part62 Crafting the Order Part 2
Order アプリの作成 part2
carts/checkout_views.htmlの編集
{% extends "base.html" %} {% load i18n %} {% load crispy_forms_tags %} {% block content %} {% if not user_can_continue %} ... {% else %} <p class='lead'> あなたのご注文内容 </p> <table class='table'> <tr>Tax: {{order.cart.tax_total }}</tr> <tr>Sub Total: {{order.cart.total }}</tr> <tr>Shipping: {{order.shipping_total }}</tr> <tr>Total: {{order.total }}</tr> </table> {% endif %} {% endblock %}
- user_can_continue がtrueの場合の処理の内容。user_can_continueのtrue or falseは、carts/views.pyの、以下のコードと対応している。
elif self.request.user.is_authenticated() or user_check_id != None: user_can_continue = True
ただ、上記だと、order.~ の部分が全く反映されない。理由はcontextを渡していないから。
carts/views.py でcontextを設定する。
class CheckoutView(FormMixin, DetailView): ... def get_context_data(self, *args, **kwargs): ... context["order"] = self.get_order()
self.get_order()で、orderのinstanceをcontextとして渡す。
checkout_view.htmlを修正していく
{% if not user_can_continue %} ... {% else %} <div class='col-sm-4 col-sm-offset-4 text-center'> <p class='lead'> あなたのご注文内容 </p> <table class='table'> <tr><td>{{ order.cart.cartitem_set.count }} 商品: <br/>{% for i in order.cart.cartitem_set.all %} <b>{{ i.item.get_title }}</b></tr><br/> {% endfor %} </td></tr> <tr><td>カート内合計金額(税別): {{order.cart.subtotal }}</td></tr> <tr><td>消費税: {{order.cart.tax_total }}</td></tr> <tr><td>商品代金合計(税込): {{order.cart.total }}</td></tr> <tr><td>送料: {{order.shipping_total_price }}</td></tr> <tr><td>合計(税込): {{order.order_total }}</td></tr> </table> </div> {% endif %}
ポイント
i.item.get_title
の箇所は、以前設定したviews.py のCartViewあたりのメソッドを持ってきている。