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

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

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

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

Q&A

1回答

2019閲覧

djangoでのurlに関するエラー

aiai8976

総合スコア112

Django

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

0グッド

0クリップ

投稿2019/04/28 08:22

編集2022/01/12 10:55

前提・実現したいこと

dajngoでpdfをアップロードして表示する簡単なアプリを作成中の者です。
アップロードしたpdfファイルの詳細ページ遷移して、タイトルを編集するところでエラーが起きているのかなと思います。
urlに関するエラーがよくわからず、行き詰っているのでわかる方がいらっしゃいましたらコメントよろしくお願いします。

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

django.urls.exceptions.NoReverseMatch: Reverse for 'edit_journal' with arguments '('',)' not found. 1 pattern(s) tried: ['edit_journal/(?P<document_id>[0-9]+)$']

該当のソースコード

edit_journal.html

edit_journal.html

1{% extends 'journals/base.html' %} 2 3{% block content %} 4 5 6<div> 7<a href="{% url 'journals:detail' document.id %}">戻る</a> 8</div> 9 10<form action="{% url 'journals:edit_journal' document.id %}" method="POST">{% csrf_token %} 11 <table> 12 <tr> 13 <th>タイトル</th> 14 <td>{{ form.title }}</td> 15 </tr> 16 </table> 17 <button class="btn" type="submit">保存</button> 18</form> 19{% endblock %}

urls.py

urls.py

1from django.urls import path 2from . import views 3from django.conf.urls.static import static 4from django.conf import settings 5 6 7app_name = 'journals' 8urlpatterns = [ 9 path('', views.index, name='index'), 10 # path('<int:journal_id>', views.detail, name='detail'), 11 path('<int:document_id>', views.detail, name='detail'), 12 path('new_journal', views.new_journal, name='new_journal'), 13 # path('delete_journal/<int:journal_id>', views.delete_journal, name='delete_journal'), 14 path('delete_journal/<int:document_id>', views.delete_journal, name='delete_journal'), 15 # path('edit_journal/<int:journal_id>', views.edit_journal, name='edit_journal'), 16 path('edit_journal/<int:document_id>', views.edit_journal, name='edit_journal'), 17 path('upload', views.model_form_upload, name='upload'), 18] 19 20urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 21

views.py

views.py

1from django.shortcuts import render, redirect 2from .models import Journal 3from django.shortcuts import get_object_or_404 4from .forms import JournalForm 5from django.views.decorators.http import require_POST 6from .forms import DocumentForm 7from .models import Document 8 9 10def index(request): 11 journals = Journal.objects.order_by('-created_datetime') 12 obj = Document.objects.order_by('-uploaded_at') 13 return render(request, 'journals/index.html', { 14 'journals': journals, 15 'obj': obj 16 }) 17 18 19# def detail(request, journal_id): 20# journal = get_object_or_404(Journal, id=journal_id) 21# return render(request, 'journals/detail.html', {'journal': journal}) 22 23def detail(request, document_id): 24 document = get_object_or_404(Document, id=document_id) 25 return render(request, 'journals/detail.html', {'document': document}) 26 27 28def new_journal(request): 29 if request.method == "POST": 30 form = JournalForm(request.POST) 31 if form.is_valid(): 32 form.save() 33 return redirect('journals:index') 34 else: 35 form = JournalForm 36 return render(request, 'journals/new_journal.html', {'form': form}) 37 38 39# @require_POST 40# def delete_journal(request, journal_id): 41# journal = get_object_or_404(Journal, id=journal_id) 42# journal.delete() 43# return redirect('journals:index') 44 45@require_POST 46def delete_journal(request, document_id): 47 document = get_object_or_404(Document, id=document_id) 48 document.delete() 49 return redirect('journals:index') 50 51 52# def edit_journal(request, journal_id): 53# journal = get_object_or_404(Journal, id=journal_id) 54# if request.method == "POST": 55# form = JournalForm(request.POST, instance=journal) 56# if form.is_valid(): 57# form.save() 58# return redirect('journals:index') 59# else: 60# form = JournalForm(instance=journal) 61# return render(request, 'journals/edit_journal.html', { 62# 'form': form, 'journal': journal 63# }) 64 65 66def edit_journal(request, document_id): 67 document = get_object_or_404(Document, id=document_id) 68 if request.method == "POST": 69 form = DocumentForm(request.POST, instance=document) 70 if form.is_valid(): 71 form.save() 72 return redirect('journals:index') 73 else: 74 form = DocumentForm(instance=document) 75 return render(request, 'journals/edit_journal.html', { 76 'form': form, 77 'document': document 78 }) 79 80 81def model_form_upload(request): 82 if request.method == 'POST': 83 form = DocumentForm(request.POST, request.FILES) 84 if form.is_valid(): 85 form.save() 86 return redirect('journals:index') 87 else: 88 form = DocumentForm() 89 return render(request, 'journals/model_form_upload.html', {'form': form}) 90

models.py

models.py

1from django.db import models 2 3 4class Journal(models.Model): 5 title = models.CharField(blank=False, null=False, max_length=150) 6 text = models.TextField(blank=True) 7 created_datetime = models.DateTimeField(auto_now_add=True) 8 updated_datetime = models.DateTimeField(auto_now=True) 9 10 def __str__(self): 11 return self.title 12 13 14class Document(models.Model): 15 description = models.CharField(max_length=255, blank=True) 16 document = models.FileField(upload_to='documents/') 17 uploaded_at = models.DateTimeField(auto_now_add=True) 18 19 def __str__(self): 20 return self.document 21

###試したこと
エラーに記載されている

1 pattern(s) tried: ['edit_journal/(?P<document_id>[0-9]+)$']

これをurls.pyに適応してみても変化しませんでした。

補足情報(FW/ツールのバージョンなど)

https://docs.docker.com/compose/django/
このサイトで環境構築行なっています。

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

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

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

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

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

guest

回答1

0

エラーの意味は、引数に空文字列( '' )を渡して edit_journal という URL パターンで該当する URL を生成しようとしたができませんでした、という意味です。

このようなエラーが起こる典型は、例えばテンプレートに

html

1<form action="{% url 'journals:edit_journal' document.id %}" method="POST">{% csrf_token %}

という記述をしていて、 document.id の値が None になったような場合です。また、 document そのものが None の場合や、そもそも document というテンプレート変数が存在しない場合にも同様のエラーが出ます。

teratail でも過去に同様の質問があるので「 django NoReverseMatch 」等のキーワードで teratail で検索されると参考になるものがいくつか見つかるかと思います。

という情報だけで解決できそうですか?いかがでしょう。

投稿2019/04/29 01:05

gh640

総合スコア1407

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問