実現したいこと
Djangoでユーザー登録制の記事公開アプリケーションを開発しています。
記事へのコメントを削除する際にNoReverseMatch
が発生していしまいます。
前提
コメント削除機能に関する要件は下記になります
・記事詳細ページ(DetailView)内にコメントを表示させる
・コメントに付随する個別のプルダウンメニューからコメントの編集/削除を行う
・コメントの削除はモーダルウィンドウで行う
・コメント削除後の遷移先は記事詳細ページとする
該当のソースコード
urls.py
1app_name = 'article' 2 3urlpatterns = [ 4 path('user/<username>', views.UserPageView.as_view(), name='userpage'), 5 path('article_detail/<int:pk>', views.ArticleDetailView.as_view(), name='article_detail'), 6 path('<int:pk>/comment/delete', views.CommentDeleteView.as_view(), name='comment_delete'), 7]
views.py
1class ArticleDetailView(generic.DetailView): 2 model = Article 3 template_name = 'article_detail.html' 4 5 def get_context_data(self, **kwargs): 6 context = super().get_context_data(**kwargs) 7 context['comment_list'] = Comment.objects.select_related('target').filter(target=self.kwargs['pk']) 8 9 return context 10 11class CommentDeleteView(generic.DeleteView, LoginRequiredMixin): 12 model = Comment 13 template_name = 'article_detail.html' 14 15 def get_success_url(self): 16 return reverse_lazy('article:article_detail', kwargs={'pk': self.kwargs['pk']}) 17 18 def delete(self, request, *args, **kwargs): 19 messages.success(self.request, "Comment has been Deleted") 20 return super().delete(request, *args, **kwargs)
article_detail.html
1{% for comment in comment_list %} 2{% if user == comment.writer %} 3<ul class="navbar-nav"> 4 <li class="nav-item dropdown"> 5 <a class="nav-link" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 6 <img class="rounded-circle u-box-shadow-sm mr-2" width="25" height="25" src="{% static 'img/three_dots_icon.png' %}" alt="Icon"> 7 </a> 8 <div class="dropdown-menu" aria-labelledby="navbarDropdown"> 9 <a class="dropdown-item" id="showModal" data-toggle="modal" data-target="#commentModal-{{ comment.pk }}">Edit</a> 10 <a class="dropdown-item" id="showModal2" data-toggle="modal" data-target="#deleteModal-{{ comment.pk }}">Delete</a> 11 </div> 12 13 <!-- コメント削除モーダルダイアログ --> 14 <div class="modal fade bd-example-modal-lg" id="deleteModal-{{ comment.pk }}" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> 15 <div class="modal-dialog modal-lg" role="document"> 16 <div class="modal-content"> 17 <div class="modal-header"> 18 <h5 class="modal-title" id="exampleModalLabel">Delete Your Comment</h5> 19 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 20 <span aria-hidden="true">×</span> 21 </button> 22 </div> 23 <div class="modal-body"> 24 <p>Do you really want to delete your comment?</p> 25 </div> 26 <div class="modal-footer"> 27 <button type="button" class="btn btn-lg btn-primary py-3 px-4" data-dismiss="modal">Cancel</button> 28 <a class="btn btn-lg btn-primary py-3 px-4" href="{% url 'article:comment_delete' comment.pk %}">Delete</a> 29 </div> 30 </div> 31 </div> 32 </div> 33 </li> 34</ul> 35{% endif %} 36{% endfor %}
発生している問題・エラーメッセージ
ブラウザ上でNoReverseMatchエラーが発生します
NoReverseMatch at /6/comment/delete Reverse for 'userpage' with arguments '('',)' not found. 1 pattern(s) tried: ['user/(?P<username>[^/]+)$'] Request Method: GET Request URL: http://127.0.0.1:8000/6/comment/delete Django Version: 3.0.3 Exception Type: NoReverseMatch Exception Value: Reverse for 'userpage' with arguments '('',)' not found. 1 pattern(s) tried: ['user/(?P<username>[^/]+)$'] Exception Location: /Users/takanotaichi/anaconda3/envs/venv_prototyping/lib/python3.7/site-packages/django/urls/resolvers.py in _reverse_with_prefix, line 677 Python Executable: /Users/takanotaichi/anaconda3/envs/venv_prototyping/bin/python Python Version: 3.7.6 Python Path: ['/Users/takanotaichi/Desktop/prototyping', '/Users/takanotaichi/anaconda3/envs/venv_prototyping/lib/python37.zip', '/Users/takanotaichi/anaconda3/envs/venv_prototyping/lib/python3.7', '/Users/takanotaichi/anaconda3/envs/venv_prototyping/lib/python3.7/lib-dynload', '/Users/takanotaichi/anaconda3/envs/venv_prototyping/lib/python3.7/site-packages'] Server time: Mon, 10 Jul 2023 17:25:57 +0900 Error during template rendering In template /Users/takanotaichi/Desktop/prototyping/article/templates/base.html, error at line 0
記載の通り、今回の機能とは全く関係のないusarpage
が呼び出されてしまっています。
調べたこと
urlパターンのディスパッチャに失敗しているとのことで、ビューやテンプレートやurlパターンで指定している名前に齟齬やタイプミスがないか買う人したところ、ミスは見当たりませんでした。
また、In template /Users/takanotaichi/Desktop/prototyping/article/templates/base.html, error at line 0
の0行目で発生しているという一文が気になり、こちらの記事を参考にしてみましたが、CommentDeleteView
ではget_context_data()
のオーバーライドは行っておらず、どこが原因なのかわかりませんでした。
0 コメント