モデルのデータを一覧画面として表示させてみます。
本記事では、SQLiteのデータベースのテーブルに登録されたデータを一覧画面として表示させます。
SQLiteのモデル作成、マイグレーション等については下記関連ページをご覧下さい。またmyapp1アプリケーションおよびlist.htmlテンプレートを作成済みで話を進めています。
関連ページ
下記のMemberモデルで作成したテーブルに登録したデータを「http://127.0.0.1:8000/myapp1/list」のURLで表示させます。
myapp1/models.py
1 2 3 4 5 6 7 8 9 |
from django.db import models class Member(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() def __str__(self): return self.name |
myapp1/urls.py
1 2 3 4 5 6 7 |
from django.urls import path from . import views urlpatterns = [ path('list/', views.list, name='list'), ] |
表示させるデータはあらかじめ管理サイトで登録しておきます。
各ファイルを編集していきます。
myapp1/views.py
1 2 3 4 5 6 7 8 |
from django.shortcuts import render from .models import Member def list(request): data = Member.objects.all() params = {'message': 'メンバーの一覧', 'data': data} return render(request, 'myapp1/list.html', params) |
6行目
objectsはマネージャ(Manager)と呼ばれるデータベースに対するクエリとしての機能を持つインターフェイスです。all()メソッドで、Memberオブジェクトのすべてのリストを取得しています。他にもget()メソッドなどがありますが本記事では説明しません。
myapp1/templates/myapp1/list.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Member表</title> </head> <body> <h1>Memberモデル</h1> <p>{{ message }}</p> <table border="1"> <tr> <th>id</th> <th>name</th> <th>age</th> </tr> {% for member in data %} <tr> <td>{{ member.id }}</td> <td>{{ member.name }}</td> <td>{{ member.age }}</td> </tr> {% endfor %} </table> </body> </html> |
以上で下記画像のような画面の表示が確認できます。
Visual Studio Code 警告メッセージの対処
views.pyでMember.objects〜の記述をした際に、下記のような警告が表示される場合があります。これはDjango用のLintをインストールして解決できます。
1 |
Class 'Member' has no 'objects' memberpylint(no-member) |
pylint-djangoをインストール。
1 |
$ pip install pylint-django |
Visual Studio Codeの setting.json に下記の設定をしました。
1 2 3 4 |
"python.linting.pylintArgs": [ "--load-plugins=pylint_django", "--errors-only" ] |
関連ページ
参照ページ
django ドキュメント