見出し画像

36歳がDjangoを勉強してみた(掲示板のサンプルデータを個別に表示)

今回もpaizaで勉強したWebアプリケーションフレームワークのDjangoについて書きます。

今日学んだことです。

【学んだこと】

●掲示板のサンプルデータを個別に表示する

今回は、データベースに入っているデータを個別に表示してみます。

今までの差分から作っていますので、最初から見たい方はこちらのマガジンより設定してください。

それでは設定していきます。

【手順】
1.ルーティングを設定するため、「myapp/helloworld/urls.py」ファイルを変更します。

$ vi myapp/helloworld/urls.py

以下の内容に変更します。

from django.urls import path
from . import views

app_name = 'helloworld' ← 新規追加

urlpatterns = [
          path('', views.index, name='index'),
          path('<int:id>', views.detail, name='detail') ←新規追加
          ]

このコードでは、ID番号をURLを呼び出すプログラムを追加しています。
「app_name」は後のリンクで使うため記載します。

2.次に「myapp>helloworld>views.py」を変更します。


~$ vi myapp>helloworld>views.py

以下のように変更します。
from django.shortcuts import render, get_object_or_404 ← 追記
from django.http import HttpResponse
from .models import Article

def index(request):
  articles = Article.objects.all()
  context = {
      'message': 'Welcome Hello 習慣',
      'articles': articles,
  }
  return render(request, 'helloworld/index.html', context)


下記のdetail関数を追加する

def detail(request, id):
   article = get_object_or_404(Article, pk=id)
   context = {
       'message': 'Show Article ' + str(id),
       'article': article,
   }
   return render(request, 'helloworld/detail.html', context)

「get_object_or_404」とはDjangoのショーカット関数で、指定したモデルからデータを取得してきます。また、エラーが発生した場合に「404」エラーを返すことができます。

その後、「context」に表示する文字を、returnで「detail.html」に戻るようにしています。

3.「detail.html」ファイルを作成します。
これは、「index.html」をコピーして内容を修正します。
次のコマンドを実行すると、「detail.html」ファイルがコピーされます。

~/myapp$ cp helloworld/templates/helloworld/index.html helloworld/templates/helloworld/detail.html

4.コピーした、「detail.html」を編集します。

<!DOCTYPE html>
<html>
 <head>
    <meta charset='utf-8'>
    <title>hello 習慣</title>
    <style>body {padding: 10px;}</style>
 </head>
 <body>
    <h1>hello 習慣</h1>
    <p>{{ message }}</p>
    <p>{{ article.content }}</p>
    <p><a href="{% url 'helloworld:index' %}">一覧></a></p>
 </body>
</html>

このプログラムでは、データベースから指定したIDのデータを取得し表示させています。
また、一覧ページに戻るためのリンクを作成しています。
※ここで、「urls.py」で作成した「app_name」を利用しています。

5.プログラムが問題なく動作するか確認します。
Djangoのサーバを起動して、ログインします。

~/myapp$ python manage.py runserver

6.ブラウザより以下のURLを入力

https://localhost:8000/helloworld/1

画像1

ID2を入力した時

画像2

ID4を入力すると。

画像3

プログラムした通り、データベースがあるID番号を指定すると、個別ページが表示され、ないID番号を指定すると404エラーが表示されました。

また、一覧リンクを押すことで一覧画面が表示されました。

画像4

一覧ページから個別ページへのリンクを作成する場合は、「index.html」に以下のようにコードを追加します。

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <title>hello 習慣</title>
    <style>body {padding: 10px;}</style>
</head>
<body>
    <h1>hello 習慣</h1>
    <p>{{ message }}</p>
    {% for article in articles %}
        <p> ← 場所移動
            {{ article.content }}
        <a href="{% url 'helloworld:detail' article.id %}">詳細</a> ←追加
        </p> ← 場所移動
    {% endfor %}
</body>
</html>

本日はここまでです。

ありがとうございました。


この記事が気に入ったらサポートをしてみませんか?