読者です 読者をやめる 読者になる 読者になる

Djangoroidの奮闘記

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

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'),
]