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

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

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

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

Python 3.x

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

Python

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

Q&A

解決済

2回答

3220閲覧

Django3のチュートリアルを学習していますが、urlpatternsの箇所で想定どおりにページが表示されないです。

makoto-n

総合スコア436

Django

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

Python 3.x

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

Python

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

0グッド

2クリップ

投稿2020/01/30 15:17

前提・実現したいこと

djangoチュートリアル3
に記述されている

お使いのブラウザで、 "/polls/34/" を見てください。 detail() メソッドが実行され、URLで提供したIDが表示されます。 "/polls/34/results/" と "/polls/34/vote/" も試してください。結果と投票ページのプレースホルダがそれぞれ表示されます。 誰かがWebサイトの 「/polls/34/」 をリクエストすると、 Django は ROOT_URLCONF に指定されている Python モジュール mysite.urls をロードします。そのモジュール内の urlpatterns という変数を探し、順番にパターンを検査していきます。 `polls/` にマッチした箇所を見つけた後、一致した文字列 ("polls/") を取り除き、残りの文字列である "34/" を次の処理のために 『polls.urls』 の URLconf に渡します。これは '<int:question_id>/' に一致し、結果として下記のように detail() が呼び出されます。

を再現したいです。

発生している問題・ソースコード

現状はこのように表示されます。
イメージ説明
polls/urls.py

python

1from django.urls import path 2 3from . import views 4 5urlpatterns = [ 6 # ex: /polls/ 7 path('', views.index, name='index'), 8 # ex: /polls/5/ 9 path('<int:question_id>/', views.detail, name='detail'), 10 path('/detail/', views.detail, name='detail'), 11 # ex: /polls/5/results/ 12 path('<int:question_id>/results/', views.results, name='results'), 13 # ex: /polls/5/vote/ 14 path('<int:question_id>/vote/', views.vote, name='vote'), 15]

ちなみにフォルダ構成はこうなっています。
が、Djangoで作成するとしてチュートリアルをこなしていますが、変な形だな…と思っています。
ディレクトリ的に同じディレクトリに入らないのかな?という意味です。
イメージ説明

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

Python 3.7.2 (default, Dec 29 2018, 00:00:04)
django.VERSION(3, 0, 2, 'final', 0)

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

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

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

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

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

tatamyiwathy

2020/01/31 08:21

あと、フォルダ構造がチュートリアルと違ってますよね。おそらくエラーの原因ですね。
makoto-n

2020/02/01 08:56

Page not found (404) になります。 > チュートリアルと違っています 。 そうなのですね ~~; 最初からやり直そうかと思います。ありがとうございます。
guest

回答2

0

メッセージが
https://github.com/django/django/blob/3.0.2/django/shortcuts.py#L78
と一緒なので、get_object_or_404を使っていると推測されます。

だとすると、チュートリアル通りに進めていないというだけの話で、もっと下の方にある
https://docs.djangoproject.com/ja/3.0/intro/tutorial03/#id8
このコードを書いてしまっているのではないでしょうか?

お使いのブラウザで、 "/polls/34/" を見てください。

の時点では
https://docs.djangoproject.com/ja/3.0/intro/tutorial03/#id2
のコードでないとおかしいです。

投稿2020/01/31 15:20

編集2020/01/31 15:21
quickquip

総合スコア11038

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

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

makoto-n

2020/02/01 09:01

> チュートリアル通りに進めていない に当てはまるとおもいます、Http404も記述していますね。 views.pyで Question.objectsに赤線が引かれているのが気になっていました。
guest

0

ベストアンサー

おそらく、ちょうど同じチュートリアルをやっている者ですが、
いつもteraterilに助けられているので、微力ながらわかる範囲で回答します。
まず、質問に提示されている情報から、あまり仕組みについて理解されていないと思います。
djangoでの画面描画までの簡単な流れとしては、クライアントでURLを叩くと、
URLの内容についてurls.pyのurlpatternsで該当する内容があれば、対象のビューが実行されます。
よって、localhost:ポート/polls/34でアクセスしようとすと、polls/urls.pyのpathの中で、
当てはまる、
ex: /polls/5/
path('int:question_id/', views.detail, name='detail'),
が実行されます。
example(例)とコメントに書かれているように、例えば/polls/5ならばこのpathが適用されるわけですが、
コードを見ると、そもそもlcoalhsot:ポート/polls/34のpollsの部分について記載がありません。
これは、なぜかというと、プロジェクト側のmysite/urls.pyがまず実行されて、/polls/urls.pyを実行しているからです。
よって、まずは、/polls/urls.pyに導いている、/mysite/urls.pyの内容が問題ないか、というところです。
しかし、チュートリアルをここまで進めれているということを考えれば、/mysite/urls.pyの
内容は問題ないと推測できます。
次は、先程書いたように、/polls/34にアクセスしたときに呼び出される、views.detailの部分です。
polls/urls.pyの上部にはfrom . import viewsという記述がありますので、
.(urls.pyと同じ階層)にあるviews.pyに記載されているdetailが実行されます。
なので、ひとまずは、ビューのdetailの内容がチュートリアルの指示通りに記載されているか、ということを調べれば良いのではないでしょうか。

投稿2020/01/31 10:29

roku28632

総合スコア36

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

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

makoto-n

2020/02/01 09:04

> チュートリアルの指示通りに記載されているか もう一度丁寧にチュートリアルをこなしてみようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問