django 13. Class Based View


  • View関数のクラスの作成
  • as view()によるView関数
  • の作成
  • は多様な機能を継承し、
  • を混合する.
    https://github.com/django/django/blob/main/django/views/generic/list.py
    試運転
  • def post_detail(request: HttpRequest, pk: int) -> HttpResponse:
    post = Post.objects.get(pk=pk)#pkというフィールド(タイプ)=実績pk(つまりpk番号pk(数字)のURL)を指定して、データを取得します.
    return render(request, 'instagram/post_detail.html', {
    'post' : post,
    })
    ここでpkはint型に入ります.(urls.pyで指定)
    すなわち、論理的にURLの後ろの数字をpkとして受信し、そのpk(id)を持つpostを取得してpostという変数に格納する.
    そしてpost detailhtmlの内容を表示します.
    Author: {{ post.author }}
    {% if post.photo %}

    {% endif %}
    {{ post.message}}
    post_detail.htmlはインポートした文章の作成者を表示します.
    photo urlを取得します.

    これでマークが付きます.

    ただし,pk=100とpk=100のPostがなければDoesNotExistが生成される.
    def post_detail(request: HttpRequest, pk: int) -> HttpResponse:
    post = get_object_or_404(Post, pk=pk)
    # try:
    #     post = Post.objects.get(pk=pk) #pk라는 필드 지정 (종류) = 실제 값 Pk (즉 pk 번호가 pk(숫자)인 url에 접속해서 해당 데이터를 가져온다.)
    # except Post.DoesNotExist:
    #     raise Http404 
    return render(request, 'instagram/post_detail.html', {
        'post' : post,
    })
    上記のコードを使用すると、404によってエラー処理される.