質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

616閲覧

【Django】Views.pyの記載方法について

pararinrinrin

総合スコア26

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/03/02 13:24

Django初心者です。
モデルから取得した内容をテンプレートに一覧表示させています。
各データに対してボタンを設置し、「delete」ボタンが押下された場合、該当データが削除され再度更新済みのモデル内容が同ページに表示されるようにしたいです。

イメージ説明

templates/lists/index.html

1<div class="container"> 2 <div class="daily"> 3 <h2 class="title">Today</h2> 4 <form action="{% url 'lists:delete_record' %}" method="POST"> 5 {% csrf_token %} 6 <ul id="daily-content"> 7 {% for daily in daily_list %} 8 <li>{{ daily.content }}<input type="hidden" name="nameID" value="{{ daily.id }}"><button name="done" type="submit" value="{{ daily.id }}">done</button><button name="delete" type="submit" value="{{ daily.id }}">delete</button></li> 9 {% endfor %} 10 </ul> 11 </form> 12 </div> 13</div> 14 15以下省略…

しかしviews.pyにて以下のように記載をすると、def delete_recordのreturnで遷移先を記載しているだけなのでDBの内容が反映されなくなってしまいます。

lists/views.py

1from django.shortcuts import render 2 3# Create your views here. 4from django.http import HttpResponse, HttpRequest 5from .models import daily, reminder, objective 6from django.views.generic import ListView 7import logging 8 9class IndexView(ListView): 10 template_name = 'lists/index.html' 11 context_object_name = 'daily_list' 12 model = daily 13 14 def get_context_data(self, **kwargs): 15 context = super(IndexView, self).get_context_data(**kwargs) 16 context.update({ 17 'reminder_list': reminder.objects.all(), 18 'objective_list': objective.objects.all(), 19 }) 20 return context 21 22 def get_queryset(self): 23 return daily.objects.all() 24 25index = IndexView.as_view() 26 27 28def delete_record(request): 29 if request.method == 'POST': 30 if 'delete' in request.POST: 31 deleteID = request.POST.get('nameID') 32 record = daily.objects.get(id=deleteID) 33 record.delete() 34 return render(request, 'lists/index.html') 35

lists/urls.py

1from django.urls import path 2from . import views 3 4from django.contrib import admin # 追加 5from django.views.generic import TemplateView # 追加 6 7app_name = 'lists' 8urlpatterns = [ 9 path('', views.index, name='index'), 10 path('delete_record', views.delete_record, name='delete_record'), 11 12] 13

該当レコードをdeleteした後、「IndexView」クラスの処理を再度行いたい場合どのように記載をすればいいのかわからず、アドバイスをいただけますと嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Supernove

2022/03/02 13:54 編集

回答する前に今作られているDjangoのディレクトリ構造を見せてほしいです。あと「path('', views.index, name='index')」のパスは「/」であってますか?
pararinrinrin

2022/03/02 14:32

ご回答ありがとうございます。ディレクトリ構造は以下のようになっております。 todo_django ├── config │ ├── __init__.py │ ├── __pycache__ │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── db.sqlite3 ├── lists │ ├── __init__.py │ ├── __pycache__ │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── __init__.py │ │ └── __pycache__ │ ├── models.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── manage.py ├── static │ ├── css │ ├── images │ └── js └── templates ├── base.html └── lists └── index.html >あと「path('', views.index, name='index')」のパスは「/」であってますか? 実際には「/lists/」でページが表示されます。読み込まれているのは「templates/lists/index.html」です。
pararinrinrin

2022/03/02 14:33

もしご質問にそれた回答になってしまっていたらすみません。
Supernove

2022/03/02 14:38

ありがとうございます、大丈夫です! 回答したので確認お願いします
pararinrinrin

2022/03/03 01:38

ご回答ありがとうございます。redirect('/lists/')で無事目的の処理ができました!
guest

回答2

0

ベストアンサー

delete_record関数の返り値を render(request, 'lists/index.html')ではなく、redirect('/lists/')に変更すればページが再読込されるはずです。redirect関数を使うにはfrom django.shortcuts import redirectを忘れずに入れてください。

投稿2022/03/02 14:38

Supernove

総合スコア1154

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

リダイレクトすればいいと思います。

投稿2022/03/02 14:00

kyokio

総合スコア560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問