スポンサーリンク

【Django】クラスベースビューでトップページを作成【ブログアプリ2】

スポンサーリンク
スポンサーリンク
この記事は約4分で読めます。

クラスベースビューでのトップページ作成について

前回の記事ではbase.html(ベーステンプレート)を作成した。

今回はクラスベースビューを用いてトップページを作成する。

 

現在のディレクトリ構成は以下の通り。

■ディレクトリ構成

 

前回:【Django】base.html(ベーステンプレート)の作成【ブログアプリ2】

 

クラスベースビューでのトップページを作成する手順

 

urls.pyの編集

~デスクトップ/Blog2/app/urls.py

[1]views.pyからインポート

TopPageView1,TopPageView2は未作成なので、次の手順でviews.pyの中で作成する。

 

[2],[3]path関数を追加

新しいURLパターンを追加。

第一引数は利用者が入力したURL。URLの末尾が一致した場合に実行される。

[1] http:127.0.0.1:8000/app/

[2] http:127.0.0.1:8000/app/index/

 

第二引数はviews.pyで定義したクラスを呼び出している。

クラスベースビューで作成した場合は、「 .as_view() 」メソッドを使う。

第三引数はこのURLパターンの名前。今回はindex1, index2とした。

 

[2],[3]のどちらもトップページを呼び出す処理を行うのみ。

本当は片方で良いが、views.pyで定義したクラスがViewクラスとTemplateViewクラスをそれぞれ継承しているため今回はそれぞれURLパターンを作成した。

 

views.pyの編集

~デスクトップ/Blog2/app/views.py

 

[1]View, TemplateViewのインポート

クラスベースビューを使うとオブジェクト指向の原則に基づいてビューを構築することができる。

Djangoには汎用ビュー(genericView)と呼ばれるクラス群があり、CRUDなどそれぞれの機能に特化したクラスがあらかじめ用意されている。

よく使われる基本的な機能は汎用ビューに元々用意されているのでコードの記述量を減らすことができる。

必要に応じて各汎用ビュークラスの内容を上書きしたり機能を追加することもできる。

また、関数ベースビューではGETメソッドかPOSTメソッドをif文を使って使い分ける必要があるが、クラスベースビューはGETとPOSTに応じて処理をかき分けることでif文での分岐が不要になる。

Viewクラスは全汎用ビューの基本となるクラス。全ての汎用ビュークラスはこのViewクラスを継承している。

ViewクラスはHTTPメソッド(POST, GET)に応じてメソッドを記述することで柔軟に処理をかき分けることができる。

TemplateViewクラスも基本となるクラスで、DBからのデータ取得は行わず、テンプレートファイルを表示させることに特化している。

 

[2]TopPageView1の作成

Viewクラスを継承して作成。

 

[3]TopPageView2の作成

こちらはTemplateViewクラスを継承して作成

 

[2]、[3]はどちらも同じことを行っているので片方だけで良い。

今回はどちらのクラスも使用してみたかったのでそれぞれ作成した。

 

 

index.htmlの作成

~デスクトップ/Blog2/templates/index.html

 

{% extends ‘base.html’ %}

base.htmlを継承していることを示す。

 

{% block title %}ブログ{% endblock %}

base.htmlの{% block title %}から{% endblock %}で囲われている部分に追記している。

 

{% block content%}

<h1>トップページ</h1>

{% endblock %}

 

base.html内の{% block content %} {% endblock %}で囲われた部分を継承している。

 

ディレクトリ構成の確認

 

現在のディレクトリ構成は以下の通り。

■ディレクトリ構成

 

 

Django記事一覧

前回:【Django】base.html(ベーステンプレート)の作成【ブログアプリ2】

次回:【Django】クラスベースビューで一覧画面を作成【ブログアプリ2】

 

Django記事一覧

 

 

コメント