eCommerce 2 part10 Add HTML Template
template作成 と viewの設定(cbv とfunction viewの違い)
ひとまず、products/templates/products/product_detail.htmlのフォルダとファイルを作成する
product_detail.html 試してみる。
{% extends "base.html" %} {% block content %} {{ object.title }} {{ object.id }} {% endblock %}
- products/views.py の product_detail_view_func に、404errorをつける
from django.shortcuts import render, get_object_or_404 # これをimportするのを忘れない product_instance = get_object_or_404(Product, id=id) # product_instance = Product.objects.get(id=id) に404errorをつけた感じ
これは、Product のobjectをidで、絞り込んで、 1. objectがあった場合は、product_instance = Product.objects.get(id=id) 2. なかった場合は、raise Httperror404 になる。 という便利な関数なはず。
- ちなみに、get_object_or_404を使わない場合は、
try: product_instance = Product.objects.get(id=id) except Product.DoesNotExist: raise Http404 except: raise Http404
という感じ。
そのため、class based viewはかなりコードがおさえられる。
今回は、class based viewを活用していく。ただ、function viewも細かい設定がしやすいので、多分今後使っていく。
最終的に、urlpatternも、class based viewの方だけ残しておく。
urlpatterns = [ # url(r'^$', 'newsletter.views.home', name='home'), url(r'^(?P<pk>\d+)$', ProductDetailView.as_view(), name='product_detail'), # url(r'^(?P<id>\d+)$', 'products.views.product_detail_view_func', name='products_detail_function'), ]