Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

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あたりのメソッドを持ってきている。