KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

DjangoでViewを追加する手順メモ

登録日 :2024/01/29 19:16
カテゴリ :python django

DjangoページにViewを追加して、DBと連携してHTML表示させる手順

views.pyを作成する

データベース(モデル)からデータを抽出するなどのビジネスロジックを作成する。
このとき連携するページはtemplate_nameで指定する。
以下、DBを表示する

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views import generic
from django.urls import reverse_lazy
from django.db.models import Q

import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(
    os.path.dirname(os.path.abspath(__file__)))))
from blog.models import HomePageUpdateModel


class HomeIndexView(LoginRequiredMixin, generic.ListView):
    template_name = 'pages/main.html'
    model = HomePageUpdateModel
    paginate_by = 10

    def get_queryset(self):
        queryset = HomePageUpdateModel.objects.order_by('-updated_at')
        return queryset

作成したViewを__init__.pyで連携させる

from .A_views import *
from .B_views import *
from .C_views import *
from .D_views import *

アプリのルーティング設定

アプリのurls.pyにて、アプリ(HTML)へのルーティングとビジネスロジックの紐付けをする。

new_urlpatterns = [
    path('home/', views.HomeIndexView.as_view(), name='home'),
]

urlpatterns += new_urlpatterns

HTMLを作成する

HTML(上記例では、template_nameで指定した’main.html')を作成する。
例えば、データベースの中身をforループで表示させるコードは以下のようになる。
views.pyから取得するモデルのオブジェクトは、一般的に「object_list」でHTML側で取得して扱うことができる。

{% for item in object_list %}
            <tr>
                {% if forloop.counter == 1 %}
                    <th scope="row"><span class="badge badge-danger">New</span></th>
                {% else %}
                    <th scope="row"></th>
                {% endif %}
                <td>{{ item.updated_at|date:"Y/m/j" }}</td>
                <td>{{ item.title }}</td>
            </tr>
            {% endfor %}