Python Django 入門トップページ


Django によるコメント掲示板の開発:目次

  1. プロジェクトの作成
  2. Git でコミット
  3. Web サーバを起動しておく
  4. Config
  5. Comments アプリケーションを作る
  6. アプリケーションを有効にする
  7. はじめてのビューを作成する
  8. モデルを作る
  9. マイグレーション
  10. テストデータの設定
  11. データベースからコメント一覧を取得して表示してみよう
  12. Bootstrap の導入
  13. コメントの詳細表示
  14. urls.pyの書き方
  15. HTML のテンプレート化
  16. コメントの新規投稿
  17. コメントの編集機能を追加する
  18. さらにテンプレート化
  19. モデル,マイグレーションファイル,フォームの関連
  20. 入力内容の検証(バリデーション)
  21. コメントを削除する
  22. 一覧を逆順にする
  23. ページネーション
  24. フラッシュメッセージ
  25. Static コンテンツの設置
  26. 更新や削除にもフラッシュメッセージを表示
  27. テストの自動化を実現しよう
  28. デバッグツールバーを使う
  29. generic モジュールを使わずにコメント一覧を取得する
  30. コメント一覧のページネーション
  31. 一覧の表示順序を制御する
  32. generic モジュールを使わずにコメントの詳細を表示する
  33. コメント詳細にページ送り機能を作成する
  34. generic モジュールを使わずにコメント登録機能を作成する
  35. generic モジュールを使わずにコメント編集機能を作成する
  36. generic モジュールを使わずにコメント削除機能を作成する

Django によるコメント掲示板の開発

データベースからコメント一覧を取得して表示してみよう

ようやくデータベースにサンプルのデータが登録できたので,このデータを取得してコメント一覧として表示してみよう.Laravel のようにコントローラでSQLに近いコマンドを入力してデータを取り出して,それを表示する方法も可能であるが,Django にはモデル名を指定するだけで一覧を取得できるような機能があるので,それを利用してみよう.

まず,comments/views.py で django.views.generic から ListViewComment モデルをインポートする.またこれまであった index 関数を削除するかコメントアウトし,CommentIndexView クラスを定義する.また不要になったインポート文もコメントアウトするか削除する.よって,必要であるのは 3, 4 行目と 11, 12 行目だけである.

comments/views.py
# from django.shortcuts import render
# from django.http import HttpResponse
from django.views.generic import ListView
from .models import Comment

# Create your views here.

# def index(request):
#     return HttpResponse("Hello, world. You're at the comments index.")

class CommentIndexView(ListView):
    model = Comment

これだけで,コメント一覧が取得できており,object_listモデル名_list で(今回の場合は comment_list で)HTML ファイルからアクセスできる.また,ListView を使用した場合は,対応する HTML ファイルが モデル名_list.html となるので,comment_list.html ファイルを comments/templates/comments フォルダを作成してこの中に設置する.

comments/templates/comments/comment_list.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>コメント一覧</title>
</head>
<body>
{% block content %}
<h1>コメント一覧</h1>
<ul>
    {% for comment in object_list %}
        <li>
            {{ comment.title }} : {{ comment.body }}
        </li>
    {% endfor %}
</ul>
{% endblock content %}
</body>
</html>

なお,上の11行目で object_listcomment_list でも動作する.

最後に urls.py を次にように変更する.5行目でアプリケーションの名称を設定し,7行目では views.py で定義したクラス名を指定する.なお,urls.pyにおいて views のインポート方法と書き方にいくつかの方法がある.これについてはのちのステップ「urls.pyの書き方」で説明する.

comments/urls.py
from django.urls import path

from . import views

app_name = 'comments'

urlpatterns = [
    path('', views.CommentIndexView.as_view(), name='index'),
]

ここまでできれば,Web サーバを起動して,トップページにアクセスしてみよう.データベースからすべての内容が取得できているはずである.

django2022-00004

なお,表示された(生成された) Web ページについて,3件目のコメントの部分を確認すると HTML タグ文字 < や > が &lt; や &gt; にエスケープされていることも確認できる.すなわち,もしも悪意を持った利用者が HTML タグや JavaScript などを投稿したとしても,それが実行されることがなく安全であることを意味している.

目次に戻る