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を書く事ができる。
そんな感じっすかね。以上!今日はもっとあげちゃうぜ