
こんにちは!Masaです。
今回も引き続き家計簿アプリの作成を行っていきましょう💪
前回の記事↓

- Django初心者で簡単なWebアプリケーション作成を考えている人
 - Djangoの学び直しをしている人
 - Djangoの基礎を身に付けたい人
 
前回のおさらい
前回の記事ではフォームの配置や、データの受け渡しを行いました。
from django.shortcuts import render, redirect
from django.views import View
from .models import Income, Expense, Account, Assets
from .forms import IncomeForm, ExpenseForm
#トップページ
class IndexView(View):
    def get(self, request):
        #データをインスタンスに格納
        income = Income.objects.all()
        expense = Expense.objects.all()
        #formをインスタンスに格納
        incomeform = IncomeForm()
        expenseform = ExpenseForm()
        params = {
            'income': income,
            'expense': expense,
            'incomeform': incomeform,
            'expenseform': expenseform,
        }
        return render(request, 'money_diary/index.html', params)
    def post(self, request):
        #収入の登録が行われた時
        if 'income_register_button' in request.POST:
            income = Income()
            incomeform = IncomeForm(request.POST, instance=income)
            incomeform.save()
        #支出の登録が行われた時
        elif 'expense_register_button' in request.POST:
            expense = Expense()
            expenseform = ExpenseForm(request.POST, instance=expense)
            expenseform.save()
            
        return redirect(to='/')
{% extends 'money_diary/base.html' %}
{% block content %}
  <h2>収入の入力</h2>
  <form method="post">
    {% csrf_token %}
    {{ incomeform.as_p }}
    <button type="submit" name="income_register_button">追加</button>
  </form>
  <h2>支出の入力</h2>
  <form method="post">
    {% csrf_token %}
    {{ expenseform.as_p }}
    <button type="submit" name="expense_register_button">追加</button>
  </form>
  <h2>収入履歴</h2>
  <table>
    {% for item in income %}
    <tr>
      <td>{{ item.date }}{{ item.kind }}{{ item.amount }}</td>
    </tr>
    {% endfor %}
  </table>
  <h2>支出の履歴</h2>
  <table>
    {% for item in expense   %}
    <tr>
      <td>{{ item.date }}{{ item.kind }}{{ item.amount }}</td>
    </tr>
    {% endfor %}
  </table>
{% endblock %}ナビゲーションバーの表示
今回の記事では各ページの作成、ナビゲーションバーの導入を行いたいと思います。
各ページとは
- トップページ
 - 月別収入・支出の詳細ページ
 - 口座別保有資産ページ
 - 資産の推移ページ
 - 設定ページ
 
などです。
最初はこの5ページを作成し、必要に応じて追加していきたいと思います。
各ページにはナビゲーションバーから移動できるようにします。
ナビゲーションバーとは各ページに飛べるボタンが並んでるものです。
ちょっと違いますが、当サイトだと以下の赤枠の部分ですね。

それでは各ページを作成していきましょう。
各ページのテンプレートを作成する
各ページにはそれぞれテンプレートが必要になるため作成します。
今回、各テンプレートは、
- トップページ : index.html
 - 月別収入・支出の詳細ページ : monthly_details.html
 - 口座別保有資産ページ : by_account.html
 - 資産の推移ページ : assets.html
 - 設定ページ : setup.html
 
としますので、”index.html”以外を新規に作成してください。

各ビューの設定
次に各ページを表示するためにviews.pyでクラスを作成します。
まだなにも表示させないため、形だけ作成しておきます。
以下のコードをviews.pyに追加して下さい(IndexViewの下)
class Monthly_DetailsView(View):
    def get(self, request):
        params = {
        }
        return render(request, 'money_diary/monthly_details.html', params)
class By_AccountView(View):
    def get(self, request):
        params = {
        }
        return render(request, 'money_diary/by_account.html', params)
class AssetsView(View):
    def get(self, request):
        params = {
        }
        return render(request, 'money_diary/assets.html', params)
class SetupView(View):
    def get(self, request):
        params = {
        }
        return render(request, 'money_diary/setup.html', params)URLの設定
次に各ページのURLを設定します。
アプリケーションディレクト”money_diary”の“urls.py”に追記します。
from django.urls import path
from . import views
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('monthly_details/', views.Monthly_DetailsView.as_view(), name='monthly_details'),
    path('by_account/', views.By_AccountView.as_view(), name='by_account'),
    path('assets/', views.AssetsView.as_view(), name='assets'),
    path('setup/', views.SetupView.as_view(), name='setup'),
]
Bootstrapの導入
ナビゲーションバーの導入にBootstrapを使用します。
Bootstrapについては以前の記事で簡単に導入方法を紹介しています。
(テンプレート作成/base.htmlの部分)

今回も同様に、まずBootstrapの準備として”base.html”にコードを追加します。
<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>家計簿アプリ</title>
    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
  </head>
  <body>
    <h1>家計簿アプリ</h1>
    {% block content %}{% endblock %}
    <!-- Bootstrap Javascript -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
  </body>
</html>次にナビゲーションバーを導入します。
ナビゲーションバーはどのページでも上部に表示されるものなので、“base.html”に記述します。
Bootstrapのnavbarのページにサンプルがあるので””コピーして改良しましょう。
<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>家計簿アプリ</title>
    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
  </head>
  <body>
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
      <div class="container-fluid">
        <a class="navbar-brand" href="#">家計簿アプリ</a>
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarSupportedContent">
          <ul class="navbar-nav me-auto mb-2 mb-lg-0">
            <li class="nav-item">
              <a class="nav-link" href="{% url 'index' %}">Home</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="{% url 'monthly_details' %}">月別詳細</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="{% url 'by_account' %}">資産詳細</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="{% url 'assets' %}">資産推移</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="{% url 'setup' %}">設定</a>
            </li>
          </ul>
          <form class="d-flex">
            <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
            <button class="btn btn-outline-success" type="submit">Search</button>
          </form>
        </div>
      </div>
    </nav>
    {% block content %}{% endblock %}
    <!-- Bootstrap Javascript -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
  </body>
</html>
サンプルよりも簡単にしてあります。
いじった部分は主に20行目から34行目までで、各リストにリンクを結びつけています。
サンプルでは文字色のグラデーションがありましたが、今回は消しています。
これで各ページにナビゲーションバーから飛べると思います。
飛んだ先は白紙になって入れなOKです。
各テンプレートにbase.htmlを反映させる
各ページでもナビオゲーションバーが表示されるようにしましょう。
“index.html”以外のテンプレートに以下のコードを記述して下さい。
{% extends 'money_diary/base.html' %}
{% block content %}
{% endblock %}これにより、各ページでもナビゲーションバーが表示されページを行き来することができるようになりました。
まとめ
今回の範囲は以上となります。
本日はナビゲーションバーの設置、各ページの配置を行いました。
ナビゲーションバーは家計簿アプリに限らず、どんなアプリケーションやWebページにも使う可能性があるので、覚えていて損はありません!
次回はトップページの改良から行っていきたいと思います!
最後まで読んでいただきありがとうございます。
自己学習に役立てていただけたら嬉しく思います
またSNSやブログでシェアしていただくことや、誤植などをコメントで指摘いただけたら幸いです。
次回の記事↓


  
  
  
  

コメント