views.py の中で Comment モデルをインポートして,Comment.objects.all()
によってデータベースからすべてのデータを取得することができる.これを context
辞書に与えておく.
comments/views.py
from django.conf import settings
from django.shortcuts import render
from django.contrib.auth import authenticate, login, logout
from django.shortcuts import redirect
from django.urls import reverse
from .models import Comment
# Create your views here.
def comments_index(request):
if not request.user.is_authenticated:
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
context = {}
context['comments'] = Comment.objects.all()
return render(request, 'comments/index.html', context)
コメントのデータをカードとして配置するように index.html に記述します.
comments/templates/comments/index.html
{% extends "base.html" %}
{% block title %}
コメント一覧
{% endblock %}
{% block content %}
<h1 class="my-5">コメント一覧</h1>
{% for comment in comments %}
<div class="card mb-3">
<div class="card-body">
<h5 class="card-title">
<a href="{% url 'comments:show' comment.id %}">
{{ comment.title }}
</a>
</h5>
<p class="card-text">{{ comment.body }}</p>
</div>
</div>
{% endfor %}
<ul>
<li>
<a href="{% url 'comments:index' %}">コメント一覧</a>
</li>
<li>
<a href="{% url 'comments:show' 10 %}">コメント詳細</a>
</li>
<li>
<a href="{% url 'comments:create' %}">コメント投稿</a>
</li>
<li>
<a href="{% url 'comments:update' 10 %}">コメント更新</a>
</li>
<li>
<a href="{% url 'comments:delete' 10 %}">コメント削除</a>
</li>
<li>
<a href="/">トップページへ</a>
</li>
</ul>
<p>
<a href="{% url 'comments:logout' %}">
[ ログアウト ]
</a>
</p>
{% endblock content %}
Web サーバを起動して一覧ページを表示すると,コメントのID順に全てのコメントが1ページに表示されていることが確認できます.
(py39) C:\Users\lecture\Documents\django\django_comment_auth>python manage.py runserver ⏎
Watching for file changes with StatReloader
Performing system checks...
データベースに登録されたすべてのデータを1ページに表示することは現実的ではありません.次のステップではページネーションと最終更新順に表示できるようにしてみましょう.