Djangoでレッスン記録システムを作成している、プログラム初心者です。
今までviews.pyの中をすべて関数(def)で作っていました。
その関数(def)をclassに変更したいのですが、やり方がわからずに困っています。
class化するには、defをclassに書き換えるだけではダメなのでしょうか?
関数の状態では正常にシステムが動いていました。
修正は以下のように修正しました。
views.py from django.views.generic import TemplateView ←これを追加 class ScheduleList(TemplateView): ← ここの2行を template_name = 'schedule_list' ← 追加した def schedule_list(request): """スケジュールを降順で一覧表示.""" schedules = Schedule.objects.order_by('-date') # 降順 paginator = Paginator(schedules, 5) page = request.GET.get('page', 1) try: schedules = paginator.page(page) except (EmptyPage, PageNotAnInteger): schedules = paginator.page(1) return TemplateResponse(request, 'schedule/schedule_list.html', {'schedules': schedules})
schedule_list.html <section> <div class="row"> <div class="col-lg-12"> <div class="page-header"> <h4 class="mt-4 mb-5 border-bottom">スケジュール一覧</h4> </div> </div> </div> <div class="float-right"> <a href="{% url 'schedule_create' %}"><button type="button" class="btn btn-primary">スケジュール新規追加</button></a> </div> <div class="table-responsive"> <table class="table table-hover"> <thead> <tr class="table-active"> <th scope="col" width="15%">Name</th> <th scope="col" width="15%">Date</th> <th scope="col" width="25%">Article</th> <th scope="col" width="45%">Content</th> </tr> </thead> <tbody> {% for schedule in schedules %} <tr> <td><a href="{% url 'student_detail_with_schedule' schedule.id %}">{{ schedule.student }}</a></td> <td><a href="{% url 'schedule_detail' schedule.id %}">{{ schedule.date }}</a></td> <td>{{ schedule.article }}</td> <td>{{ schedule.content }}</td> </tr> {% endfor %} </tbody> </table> </div> <p> <hr> </p> <div class="container-fluid"> {% if schedules.has_previous %} <a href="?page={{ schedules.previous_page_number }}"><< Previous</a> {% else %} <span><< Previous</span> {% endif %} | {{ schedules.number }}ページ | {% if schedules.has_next %} <a href="?page={{ schedules.next_page_number }}">Next >></a> {% else %} <span>Next >></span> {% endif %} </div> </section>
しかしこれでサーバーを実行させると
path('schedule/', schedule.views.schedule_list, name='schedule_list'), AttributeError: module 'schedule.views' has no attribute 'schedule_list' ``` このように「schedule.viewsに属性がない」とエラーになりました。 import TemplateView をインポートしましたが、これもよく分かっておらず、本を見てこれかな?と思ってインポートしました。 関数からclassに変更するには、何をどのように修正すればよいのでしょうか? まだまだ勉強中なので、わかりやすく教えていただけないでしょうか? よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。