Djangoroidの奮闘記

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

e-commerce 2 part7 Products App

今回の動画

Coding for Entrepreneurs

Class Based View を使って見る

公式サイトは、ここら辺りを参照 Built-in class-based generic views | Django documentation | Django

  • products/views.py を編集していく
from django.views.generic import DetailView
#これはversionによって違うかも。
from django.shortcuts import render
from .models import Product
# ここは変わらない

from .models import Product


class ProductDetailView(DetailView):
    model = Product


def product_detail_view_func(request, id):
    product_instance = Product.objects.get(id=id)
    template = "products/product_detail.html"
    context = {
        "object": product_instance
    }

    return render(request, template, context)
  • class でDetailViewを継承
  • model には、models.py からclassを代入
  • detail_viewをrenderするための関数を別途作成しておく。
  • この時に渡す引数として、requestは必須、便利なのは、idなどのproduct固有のkeyをurlsから渡せるようにしておくこと。こうすることで、product_instance = Product.objects.get(id=id) などのように、urlのidから、フィルターを掛けて、productsのinstanceを作成することができる。
  • template には、template名を入れるが、templates/products/テンプレートファイルというように設定する場合は、上記の例のように、pathをきちんと指定する。
  • contextは、templateに渡す引数を設定する