前提・実現したいこと
ここに質問の内容を詳しく書いてください。
DJANGO for BEGINNERSの6章を参考に、blogづくりに取り組んでいます。
その内、ブログ投稿記事の編集/削除機能を実装中に、以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
NoReverseMatch at /post/1/ Reverse for 'post_edit' with arguments '('',)' not found. 1 pattern(s) tried: ['post/(?P<pk>[0-9]+)/edit/$']
以下、全文。
Environment: Request Method: GET Request URL: http://127.0.0.1:8000/post/1/ Django Version: 2.0.6 Python Version: 3.7.1 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Template error: In template C:\Users\ryuno\OneDrive\venv\blog\templates\base.html, error at line 7 Reverse for 'post_edit' with arguments '('',)' not found. 1 pattern(s) tried: ['post/(?P<pk>[0-9]+)/edit/$'] 1 : <!DOCTYPE html> 2 : {% load staticfiles %} 3 : <html> 4 : <head> 5 : <title>blog</title> 6 : <link href="https://fonts.googleapis.com/css?family=Sedgwick+Ave" rel="stylesheet"> 7 : <link rel="stylesheet" href="{% static 'css/base.css' %}"> 8 : </head> 9 : 10 : <body> 11 : <div class ="container"> 12 : <header> 13 : <div class=""nav-left> 14 : <h1><a href="/">blog</a></h1> 15 : </div> 16 : <div class="nav-right"> 17 : <a href="{% url 'post_new' %}">+ New Blog Post</a> Traceback: File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\core\handlers\exception.py" in inner 35. response = get_response(request) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\core\handlers\base.py" in _get_response 158. response = self.process_exception_by_middleware(e, request) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\core\handlers\base.py" in _get_response 156. response = response.render() File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\response.py" in render 106. self.content = self.rendered_content File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\response.py" in rendered_content 83. content = template.render(context, self._request) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\backends\django.py" in render 61. return self.template.render(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\base.py" in render 175. return self._render(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\base.py" in _render 167. return self.nodelist.render(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\base.py" in render 943. bit = node.render_annotated(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\base.py" in render_annotated 910. return self.render(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\loader_tags.py" in render 155. return compiled_parent._render(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\base.py" in _render 167. return self.nodelist.render(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\base.py" in render 943. bit = node.render_annotated(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\base.py" in render_annotated 910. return self.render(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\loader_tags.py" in render 67. result = block.nodelist.render(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\base.py" in render 943. bit = node.render_annotated(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\base.py" in render_annotated 910. return self.render(context) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\template\defaulttags.py" in render 447. url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\urls\base.py" in reverse 90. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) File "C:\Users\ryuno.virtualenvs\blog-ksWCC2Zg\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix 636. raise NoReverseMatch(msg) Exception Type: NoReverseMatch at /post/1/ Exception Value: Reverse for 'post_edit' with arguments '('',)' not found. 1 pattern(s) tried: ['post/(?P<pk>[0-9]+)/edit/$']
該当のソースコード
HTML
1<!-- post_detail.html --> 2{% extends 'base.html' %} 3 4{% block content %} 5 6 <div class="post-entry"> 7 <h2>{{ detail_page.title }}</h2> 8 <p>{{ detail_page.body }}</p> 9 </div> 10 11 <a href="{% url 'post_edit' post.pk %}">Edit</a> 12 <a href="{% url 'post_delete' post.pk %}">Delete this</a> 13{% endblock content %}
NoReverseMatchは、urls.pyのエラーが大半というので、以下に写します。
しかし、ここを変えることに意味はなかったです。
python
1from django.urls import path 2from . import views 3 4urlpatterns = [ 5 path('', views.BlogListView.as_view(), name = 'home'), 6 path('post/<int:pk>/', views.BlogDetailView.as_view(), name='post_detail'), 7 path('post/new/', views.BlogCreateView.as_view(), name='post_new'), 8 path('post/<int:pk>/edit/', views.BlogUpdateView.as_view(), name='post_edit'), 9 path('post/<int:pk>/delete/', views.BlogDeleteView.as_view(), name='post_delete'), 10]
またedit画面と、delete画面のHTMLは、それぞれ以下の通りです。
HTML
1<!-- post_edit.html --> 2{% extends 'base.html' %} 3 4{% block content %} 5 <h1>Edit Post</h1> 6 <form action="" method="post">{% csrf_token %} 7 {{ form.as_p }} 8 <input type="submit" value="Update" /> 9 </form> 10{% endblock content %}
HTML
1<!-- post_delete.html --> 2{% extends 'base.html' %} 3 4{% block content %} 5 <h1>Delete Post</h1> 6 <form action="" method="post">{% csrf_token %} 7 <p>Are You sure to delete this post "{{ post.title }}"</p> 8 <input type="submit" value="Confirm" /> 9 </form> 10{% endblock content %}
試したこと
post.pk を、1 とか 2 といった数字に書き換えた場合は成功しました。
HTML
1<!-- post_detail.html --> 2<!-- post.pk -> 1 に変更 --> 3 4 <a href="{% url 'post_edit' 1 %}">Edit</a> 5 <a href="{% url 'post_delete' 1 %}">Delete this</a> 6
その他、タイポチェックもしましたが、特に見当たらなかったです。
補足情報(FW/ツールのバージョンなど)
text
1<!-- requirments.txt --> 2Django==2.0.6 3gunicorn==19.9.0 4pytz==2018.7 5whitenoise==4.1.2
初質問で聞き方もよくわかっていないですが、どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。