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

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

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

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

Python

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

Q&A

解決済

3回答

2867閲覧

【Django】画面遷移が思うようにいかない。

setuna0531

総合スコア128

Django

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

Python

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

0グッド

1クリップ

投稿2020/08/25 06:53

編集2020/08/25 07:05

前提

現在、予約注文システムを作成しています。
店舗名を選択し、その店舗の予約可能なカレンダーを表示しており、
数字が表示されている枠にはリンクで飛べるような設定をしています。
イメージ説明

###実現したいこと
1.数字を押した後、商品一覧を表示して商品を選択できるようにする
2.商品を選択後、選択した商品名、注文する個数、注文商品の値段が表示する。
(注文数は+-などで変更可能にしたい)
3.商品選択画面にて、任意の注文数を選択後、一時データを保存し商品一覧に戻る
4.商品一覧にて、注文確定ボタンを押すことによりDBに予約注文を反映させる。

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

困っている問題としては、カレンダーのリンクを押した先(商品一覧)に
商品選択画面へ移行するリンクを張ると商品一覧にてエラーが表示されてしまい、思った動作になりません。
※現在はリンクを切っています。

下記の画面は商品一覧になります。

イメージ説明

エラーメッセージ

NoReverseMatch at /shop/2/item_list/2020/8/25/1020/ Reverse for 'item_list' with no arguments not found. 1 pattern(s) tried: ['shop\/(?P<pk>[0-9]+)\/item_list\/(?P<year>[0-9]+)\/(?P<month>[0-9]+)\/(?P<day>[0-9]+)\/(?P<minute>[0-9]+)\/$']

エラー内容的にはurls.pyが悪さしているようにも見えますが、どう直していいかもわからないためお手上げ状態です。

該当のソースコード

item_list.html

{% extends 'testapp/base.html' %} {% load calendar %} {% block content %} <h1>{{ shop.shopname }}</h1> <p>{{ view.kwargs.year }}年{{ view.kwargs.month }}月{{ view.kwargs.day }}日 {% get_display_time view.kwargs.minute %}時に予約</p> <form action="" method="POST">{% csrf_token %} <div> {% for item in item %} <div><a href="{% url 'testapp:item_order' %}" >{{item.itemname }}</a></div> <!-- item_orderが商品選択画面です。item.itemnameはitemに登録されている商品名を表示しています。--!> {% endfor %} </div> <input type="button" value="Back" onClick="javascript:history.go(-1);"> </form> {% endblock %}

urls.py

from django.urls import path from . import views urlpatterns = [ path('', views.Company_List.as_view(), name='company_list'), path('company/<int:pk>/shop/', views.Shop_List.as_view(), name='shop_list'), path('shop/<int:pk>/calendar/', views.Calendar.as_view(), name='calendar'), path('shop/<int:pk>/calendar/<int:year>/<int:month>/<int:day>/', views.Calendar.as_view(), name='calendar'), path('shop/<int:pk>/item_list/<int:year>/<int:month>/<int:day>/<int:minute>/', views.Item_List.as_view(), name='item_list'), path('shop/<int:pk>/item_list/<int:year>/<int:month>/<int:day>/<int:minute>/item_order/', views.Item_Order, name='item_order'),

views.py

class Item_List(generic.TemplateView): model = Schedule fields = ('name',) template_name = 'testapp/Item_List.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['shop'] = get_object_or_404(Shop, pk=self.kwargs['pk']) item = Item.objects.values() context['item'] = item return context

試したこと

商品選択画面に行くURLをDjangoの表記{% url 'testapp:item_order' %}や
href="testapp/item_order.html"も試しましたがerrorが表示されうまく動きませんでした。

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

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

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

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

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

guest

回答3

0

{% url 'testapp:item_order' %} ```パラメータの変数を指定しないと無理ではないでしょうか?

投稿2020/08/25 10:18

ForestSeo

総合スコア2722

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

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

setuna0531

2020/08/26 02:25 編集

ご回答ありがとうございます。 商品一覧のテンプレートに記載のAタグの中で ``` <a href="{% url 'testapp:item_order' %}">商品名</a> ``` という形で指定しましたが、同じエラーが表示されます。 ※質問時にも載せてあるテンプレートのソースです。 自分の想定では、Aタグに記載されたテンプレートの格納先をurls.pyに 指定したURL構成でテンプレートを表示するというイメージです。 ForestSeo様よりご回答いただいた内容は、商品一覧の商品名に埋め込むurlという認識で合っていますでしょうか。
ForestSeo

2020/08/26 07:32 編集

パラメータの変数というのは、urlに埋め込む変数のことです。 あなたの自己解決のような感じに、pkやyearを指定しなくてはいけないという意味で回答しました。
setuna0531

2020/08/26 07:58

なるほど! おかげ様でパラメータについて理解が深まりました。 ありがとうございました。
guest

0

自己解決

自己解決できました。
エラーの解析をしたところ、データの引数が足りないと怒られていたため、
テンプレートのAタグを

<a href="{% url 'testapp:item_order' shop.pk year month day minute %}">商品名</a>

という感じに書き換えたところ、URLの変換ができ、商品一覧が表示されました。

投稿2020/08/26 05:08

setuna0531

総合スコア128

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

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

0

憶測で回答します。

urlが

キーワード/変数/キーワード/変数/変数/...

のようにキーワードが変数に挟まれる形式がダメなんじゃないでしょうか。

投稿2020/08/25 09:54

tatamyiwathy

総合スコア1045

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

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

setuna0531

2020/08/26 02:25

ご回答ありがとうございます。 質問時に投稿したurls.pyに記載のカレンダーの部分は正常に動くため、 キーワードが変数に挟まれているのが原因ではないかもしれません。 ``` path('shop/<int:pk>/calendar/<int:year>/<int:month>/<int:day>/', views.Calendar.as_view(), name='calendar'), ``` →正常に動作し、図2の商品一覧が表示されます。 画面表示されたさらに先の画面へ移動するurlを記載すると エラーが表示されてしまい、商品一覧が開かなくなっている状況です。 ほかに必要な情報がありましたら追加で記載したいと思いますので、ご教授お願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問