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 %}