View on GitHub

インデックスビューの作成

Home

インデックスビューの作成

ビューは、リクエストオブジェクトを受け取って、レスポンスオブジェクトを返す役割を担います。では、http://localhost:8000/にアクセスしたときに、onlineアプリケーションのトップページが表示されるようにしてみましょう。recsys_django/online/views.pyに下記のコードを記述してください。

リスト1: recsys_django/online/views.py

from django.views.generic import View
from django.shortcuts import render
from django.http import HttpResponse


class IndexView(View):
    """インデックスビュー

    Attributes
    ----------
    context: dict
        コンテキスト
    """

    def __init__(self):
        self.context = {}

    def get(self, request, *args, **kwargs):
        """index.htmlをレンダリングしたレスポンスを取得する。

        Parameters
        ----------
        request : WSGIRequest
            リクエスト

        Returns
        -------
        HttpResponse
            index.htmlをレンダリングしたレスポンスを返す。
        """
        return render(request, 'index.html', self.context)

IndexViewは、インデックスビューに対応するクラスベースビューです。Viewクラスを継承して定義します。クラスベースビューについては、文献[1][2]を参照してください。

このビューを呼ぶために、URLとビューとを対応付けておく必要があります。そのためにはURLconfが必要になります。recsys_django/online/urls.pyを作成し、下記のコードを記述してください。

リスト2: recsys_django/online/urls.py

from django.urls import path
from . import views

app_name = 'online'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
]

さらに、このrecsys_django/online/urls.pyの記述を反映させるために、次のように、recsys_django/recsys_django/urls.pydjango.urls.includeimportを追加し、urlpatternsリストに'online.urls'に対応したパスを追加してください。

リスト3: recsys_django/recsys_django/urls.py

from django.contrib import admin
from django.urls import path, include   # includeを追加

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('online.urls')),   # 追加
]

ここまでで、下記のコマンドを実行し、開発用Webサーバを起動しましょう。

(venv_recsys_django) $ python manage.py runserver

ブラウザで下記のURLにアクセスしてみましょう。

http://localhost:8000/

インタフェース

「recsys-djangoへようこそ!」と表示されました。base.htmlで設計したように、インタフェースはナビゲーションバー、メインコンテンツ、フッターから構成されます。メインコンテンツには「recsys-djangoへようこそ!」と表示されています。ページのタイトルは「sushi recommender | recsys-django」となっています。ナビゲーションバーの右上には「サインアップ」と「ログイン」のリンクが表示されていますが、今はクリックしても何も反応しません。これらの機能は、後ほど実装していきます。

このページは、リスト1の18行目に記述されているように、IndexViewクラスのget()メソッドにおいて、テンプレートがレンダリングされることで表示されます。URLにアクセスされた後、どのような流れでこのget()メソッドが表示されるのかについては、次回でみてみましょう。

ビューの作成の詳細については、文献[3][4]を参照してください。

参考

  1. クラスベースビュー | Django ドキュメント | Django
  2. 現場で使える Django の教科書《基礎編》 # 5.2 ビュー関数の書き方(関数ベース vs クラスベース)
  3. はじめての Django アプリ作成、その 1 | Django ドキュメント | Django # はじめてのビュー作成
  4. 現場で使える Django の教科書《基礎編》 # 第5章 ビュー