Day13-2 Djangoおおおう!

# views.py

@login_required
def bag(request):
    bag = request.session.get('bag', {})
    bag_products = dict()
    total_price = 0
    for product_id, num in bag.items():
        product = Product.objects.get(id=product_id)
        bag_products[product] = num
        total_price += product.price * num

    context = {
        'bag_products': bag_products,
        'total_price': total_price,
    }
    return render(request, 'app/bag.html', context)


# bag.html
{% block content %}

{% for product, num in bag_products.items %}

        <a href="{% url 'app:detail' product.id %}">
          <img src="{{ product.image.url }}" class="product-img">
        </a>

        <h2>{{product.name}}</h2>

        <div>価格:{{ product.price | intcomma }}</div>
        <div>個数:{{ num | intcomma }}</div>

        <div>小計:{{ product.price | multiply:num | intcomma }}</div>

 {% endfor %}

{% endblock %}


# sessionのイメージ
session = {
    'bag' = {
        '1':99
    }
}

# views.py
cart = request.session.get('bag', {}) ........これで、bagセッションを辞書としてとってくる
・bag_products = dict() ........これで、bag_productsという辞書を作成

~~~~~~~~for文の中身~~~~~~~~~~

・ for product_id, num in bag.items() .........これで、bagという辞書に入っているkeyとvalueをproduct_idとnumとしてとってくる。item()は辞書のkeyとvalue両方をとってくる書き方。
  ・product = Product.objects.get(id=product_id) ......モデルのProductクラスからidをとって、productに入れる
  ・bag_products[product] = num .....これは辞書に要素を追加している。例えばbag["id"] = valueとすると、表示されるのはbag = {"id":value}というのが追加される。つまりここで表示されるのはbag_products = {"product(つまりproductのid)": numということになる}

【Python入門】dictionary(辞書)の使い方。基本と応用 | 侍エンジニアブログ (ありがとうございます.....)





#xxx.html
ここではviews.pyのcontextからhtmlに渡されたものをもとに、{%%}文の中に中に書く事ができる。

・{% for product, num in bag_products.items %} ..........bag_products.itemsで辞書のペアを取り出す。キーとバリューをproductとnumで置き換えるというか入れるというか。
・a href="{% url 'app:detail' product.id %}"........... product.idでリンクを書ける。
・img src="{{ product.image.url }}" .......... product.image.urlでimageのpathを書く事ができる。

そんな感じっすかね。以上!今日はもっとあげちゃうぜ