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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

874閲覧

create_page() got an unexpected keyword argument 'book_id'を解決したいです。

miyamto_kentaro

総合スコア4

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/12/28 03:36

前提・実現したいこと

htmlの<a>{% url %}</a>で受け取った値を関数の引数に入れて、処理をしたいです。

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

NoReverseMatch at /book/create_page/1/ Reverse for 'create_page' with no arguments not found. 1 pattern(s) tried: ['book/create_page/(?P<book_id>[0-9]+)/$']

該当のソースコード

html

1<!-- layout.html --> 2{% load static %} 3<!doctype html> 4<html lang="ja"> 5<head> 6 <meta charset="utf-8"> 7 <title>{% block title %}{% endblock %}</title> 8 <link rel="stylesheet" type="text/css" 9 href="{% static 'book/style.css' %}" /> 10</head> 11<body> 12 13 <div class="menu"> 14 <table> 15 <tr> 16 <th width="150px">menu</th> 17 <td> 18 <table> 19 <tr> 20 <td><a href="{% url 'index' %}">ホーム</a></td> 21 <td>&nbsp;&nbsp;&nbsp;</td> 22 <td><a href="{% url 'create_book' %}" method="post">本の追加</a></td> 23 </tr> 24 </table> 25 </td> 26 </tr> 27 </table> 28 </div> 29 30 <div class="header"> 31 {% block header %} 32 {% endblock %} 33 </div> 34 35 <div class="search"> 36 <p>※本の名前や著者名を記入して本を探す</p> 37 <div class="searchform"> 38 <table> 39 <form action="{% url 'search' %}" method="post"> 40 {% csrf_token %} 41 {{form}} 42 <tr> 43 <th></th> 44 <td><input type="submit" value="検索"></td> 45 </tr> 46 </form> 47 </table> 48 </div> 49 </div> 50 51 <div class="content"> 52 {% block content %} 53 {% endblock %} 54 </div> 55</body> 56</html>

html

1<!-- model_book.html --> 2{% extends 'book/layout.html' %} 3 4{% block title %} 5{{title}} 6{% endblock %} 7 8{% block header %} 9{{title}} 10{% endblock %} 11 12{% block content %} 13<table> 14 <tr> 15 <td>タイトル(著者)</td> 16 <td></td> 17 <td>最大ページ数</td> 18 <tr> 19 <td>{{obj}}</td> 20 <td></td> 21 <td>{{obj.page_max}}page</td> 22 <td></td> 23 <td><a href="{% url 'create_page' obj.id %}" method="post">ページを追加する</a></td> 24 </tr> 25</table> 26<table> 27<tr> 28<td>{{tags}}</td> 29</tr> 30</table> 31{% endblock %}

html

1<!-- model_page.html --> 2{% extends 'book/layout.html' %} 3 4{% block title %} 5{{title}} 6{% endblock %} 7 8{% block header %} 9<tr> 10<td>{{page_num}}ページ</td> 11<td></td> 12<td>{{title}}</td> 13</tr> 14{% endblock %} 15 16{% block content %} 17<table> 18 <tr> 19 <td>タイトル(著者)</td> 20 </tr> 21 <tr> 22 <td>{{obj}}</td> 23 <td></td> 24 <td><a href="{% url 'create_page' %}" method="post">ページを追加する</a></td> 25 </tr> 26</table> 27{% endblock %}

python

1#urls.py 2from django.urls import path 3from . import views 4 5urlpatterns = [ 6 path('', views.index, name='index'), 7 path('search', views.search, name='search'), 8 path('model_book/<int:book_id>/', views.model_book, name='model_book'), 9 path('model_page/<int:page_id>/', views.model_page, name='model_page'), 10 path('create_book', views.create_book, name='create_book'), 11 #create_page 12 path('create_page/<int:book_id>/', views.create_page, name='create_page'), 13 ]

python

1#import 2from django.shortcuts import render 3from django.shortcuts import redirect 4 5from .forms import SearchForm 6from .forms import CreateBookForm 7from .forms import CreatePageForm 8 9from .models import Book 10from .models import Page

python

1#views.create_page 2def create_page(request, book_id): 3 get_id = book_id 4 message = '新しいページを追加する' 5 if (request.method == 'POST'): 6 book_title = Book.objects.get(id=get_id) 7 num = request.POST['page_number'] 8 book = book_title 9 check = Page.objects. filter(page_number=num).\ 10 filter(book_title=book) 11 if check.count() == 0: 12 page = Page(book_title=book_title,book_number=num) 13 page.save() 14 page_id_num = Page.objects.filter(page_number=num).\ 15 filter(book_title=book).values_list('id', flat = True)[0] 16 message = page_id_num 17 return redirect('model_page',page_id_num) 18 else: 19 message = 'そのページはすでに存在しています' 20 params = { 21 'message':message, 22 'createform':CreatePageForm(), 23 'form':SearchForm(), 24 } 25 26 return render(request, 'book/create_page.html', params)

試したこと

①html内の<a>タグでrequestを送っても上記のエラーメッセージが現れたので、直接ブラウザに入力してみましたが、同じエラーメッセージが現れました。そのため、htmlの問題ではないと予想されます。
②create_pageの引数をbook_idからbookに書き換えると
【TypeError at /book/create_page/1/
create_page() got an unexpected keyword argument 'book_id'】
とのエラーコードを受けました。これより、book_idを受け取っていることが予想されます。

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

Django Version: 2.2.7
Python Version: 3.7.5

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問