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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4065閲覧

DjangoでNoReverseMatchのエラー

akapen

総合スコア1

Django

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/07 14:18

編集2020/05/07 14:19

前提・実現したいこと

Djangoを使って、日記の登録、編集、削除機能があるホームページを作っています。
ページ遷移する際にNoReverseMatch atというエラーが出力されます。
エラーが発生するのはdiary_detail.htmlの削除ボタンからdiary_delete.htmlというページに遷移するときです。
このエラーを解消したいと考えています。

発生している問題・エラーメッセージ

イメージ説明

エラーメッセージ NoReverseMatch at /diary-delete/3/ Reverse for 'diary_detail' with arguments '('',)' not found. 1 pattern(s) tried: ['diary\-detail/(?P<pk>[0-9]+)/$']

該当のソースコード

html

1#diary_delete.html 2 3{% extends 'base.html' %} 4{% load static %} 5 6{% block title%}日記削除|Private Diary{% endblock %} 7 8{% block active_diary_list %}active{% endblock %} 9 10{% block contents %} 11 12<div class="container"> 13 <div class="row"> 14 <div class="my-div-style w-100"> 15 <form method="POST"> 16 {% csrf_token %} 17 <p>本当に削除しますか。</p> 18 <button class="btn btn-primary mt-5" type="submit">削除</button> 19 <a class="btn btn-secondary mt-5 ml-2" href="{% url 'diary:diary_detail' objcet.pk %}"> 20 キャンセル 21 </a> 22 </form> 23 </div> 24 </div> 25</div> 26{% endblock %}

html

1#diary_detail.html 2{% extends 'base.html' %} 3{% load static %} 4 5{% block title%}日記詳細|Private Diary{% endblock %} 6 7{% block active_diary_list %}active{% endblock %} 8 9{% block contents %} 10<div class="container"> 11 <div class="my-div-style w-100"> 12 13 #略 14 15 <a class="btn btn-success mt-5 mb-3" href="{% url 'diary:diary_update' object.pk%}">編集</a> 16 <a class="btn btn-success mt-5 ml-2 mb-3" href="{% url 'diary:diary_delete' object.pk%}">削除</a> 17 </div> 18</div> 19{% endblock %} 20 21 22

views

1#views.py 2 3 4from django.shortcuts import render 5from django.urls import reverse_lazy 6from django.views import generic 7from django.contrib import messages 8from django.contrib.auth.mixins import LoginRequiredMixin 9from .models import Diary 10 11 12class DiaryDeleteView(LoginRequiredMixin, generic.DeleteView): 13 model = Diary 14 template_name = 'diary_delete.html' 15 success_url = reverse_lazy('diary:diary_list') 16 17 def delete(self, request, *args, **kwargs): 18 messages.success(self.request, "日記を削除しました。") 19 return super().delete(request, *args, **kwargs) 20

urls

1#urls.py 2 3from django.urls import path 4 5from . import views 6 7app_name = 'diary' 8urlpatterns = [ 9 path('', views.IndexView.as_view(), name="index"), 10 path('inquiry/', views.InquiryView.as_view(), name="inquiry"), 11 path('diary-list/', views.DiaryListView.as_view(), name="diary_list"), 12 path('diary-detail/<int:pk>/', views.DiaryDetailView.as_view(), name="diary_detail"), 13 path('diary-create/', views.DiaryCreateView.as_view(), name="diary_create"), 14 path('diary-update/<int:pk>/', views.DiaryUpdateView.as_view(), name="diary_update"), 15 path('diary-delete/<int:pk>/', views.DiaryDeleteView.as_view(), name="diary_delete"), 16] 17

試したこと

エラーメッセージでググってみたのですが、本件に参考になりそうな情報を見つけることができませんでした。
参考にしているテキストのソースコードと見比べたのですが、差を見つけることができませんでした。
diary_delete.htmlに何も記述しなくても同様のエラーが発生したこと、URLを直接入力しても画面が遷移しなかったことから、
urlpatternsが問題かと思ったのですが、特に問題を見つけることができませんでした。

ツールなど

venv仮想環境を作成し、Pycharmを使って編集しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

models.pyを見てないので予想ですが、
{% url 'diary:diary_detail' objcet.pk %}

{% url 'diary:diary_detail' objcet.id %}
に変えてみてください。

エラー内容としては、pkが渡せていないと言うことなので、おそらくDiaryモデルにpkのデータがないのかと思います。
ただ、diary_detail.htmlはちゃんと{% url 'diary:diary_delete' object.pk%}で遷移出来ているので、おそらくviews.pyにpkにidを入れる処理があるのかと思います。(これは完全に予想ですが、、、)

また、こちらどこかのサイトや本を参考にされていますでしょうか?
最近全く同じようなモデル名とエラーの質問に回答したので、参考先が同じの可能性があります。
もしありましたら教えてください。

投稿2020/05/08 01:46

llr114

総合スコア203

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

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

akapen

2020/05/09 00:55

ご回答いただきありがとうございます! 今回はpk=idに入れるという処理は入れておらず、そのままpkとしてサイトを作っています。 ご指摘頂いた通り、pkの受け渡しを含めたページ遷移について再度見直しました。 そうしたらDiaryDeleteViewクラスのtemplate_name = diary_update.htmlという違うhtmlにしたら正しく遷移することがわかりました。 なので、pyファイルでなく、html側に問題があるのだと考えました。 その後、diary_delete.htmlを作り直したところうまく遷移しました。 diary_delete.htmlの再作成前後でDIFFを取ったのですが、差分はありませんでした。 なので、最終的になぜうまく遷移しなかったのはわかりません。 ただ、エラー原因について確証が持てなかったのでご回答いただき大変助かりました。 また、このページは大高隆著 動かして学ぶ python django開発入門を参考に作成しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問