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

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

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

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

Python

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

Q&A

解決済

2回答

4233閲覧

detail.htmlを表示させたいがPage not foundと出る

退会済みユーザー

退会済みユーザー

総合スコア0

Django

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

Python

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

0グッド

0クリップ

投稿2017/08/13 06:21

編集2017/08/18 13:13

detail.htmlを表示させたいがPage not foundと出ます。
チュートリアル https://docs.djangoproject.com/ja/1.11/intro/tutorial04/
キータの記事
https://docs.djangoproject.com/ja/1.11/intro/tutorial04/
を見ながらWEBサイトを作っています。
detail.htmlに

<!DOCTYPE html> <h1>{{ question.question_text }}</h1> {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} <form action="{% url 'poll_vote' question.id %}" method="post"> {% csrf_token %} {% for choice in question.choice_set.all %} <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" /> <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> {% endfor %} <input type="submit" value="Vote" /> </form> </html>

と書きました。このdetail.htmlを表示させたいのですが、
detail.htmlを表示させるであろうURL(http://localhost:8000/polls/1/)にアクセスするとエラーが出ます。URL指定が間違っているのでしょうか?
views.pyには

from django.shortcuts import render from django.utils.html import mark_safe from .models import Question from django.http import HttpResponse from django.shortcuts import Http404 from django.shortcuts import get_object_or_404,redirect from .models import Choice from django.views.generic import TemplateView from django.views.generic import DetailView from django.views.generic import ListView # from .model import AppModel from .forms import MyForm from .forms import VoteForm # Create your views here. def index(request): return render(request,'polls/index.html',{ 'questions': Question.objects.all(), }) def detail(request,pk): obj = get_object_or_404(Question,pk=pk) if request.method == "POST": form = VoteForm(question=obj,data=request.POST) if form.is_valid(): return redirect('polls:results',pk) else: form = VoteForm(question=obj) return render(request,'polls/detail.html',{ 'form':form, 'question': obj, }) def vote(request,pk): pass def results(request,pk): obj = get_object_or_404(Question,pk=pk) return render(request,'polls/results.html',{ 'question':obj, }) def form_test(request): if request.method == "POST": #request.POST??? form = MyForm(data=request.POST) if form.is_valid(): pass else: form = MyForm() return render(request,'polls/form.html',{ 'form':form, })

と、
urls.pyには

from django.conf.urls import url from django.views.generic import TemplateView from . import views urlpatterns = [ url(r'^$',views.index,name='index'), url(r'(?P<pk>\d+)/$', views.detail, name='poll_detail'), url(r'(?P<pk>\d+)/vote$', views.vote, name='poll_vote'), url(r'(?P<pk>\d+)/results$', views.results, name='poll_results'), url(r'^$',TemplateView.as_view(template_name='app/index.html'),name='app_index'), url(r'^form$', views.form_test), ]

と書きました。
ディレクトリ構造は、
イメージ説明
のようになっております。
どう直せば表示させられるでしょうか?

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

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

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

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

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

guest

回答2

0

テンプレートファイルが
poll/detail.html
polls/form.html
polls/results.html
となってますが、s抜けてませんか?

投稿2017/08/13 16:02

kokardy

総合スコア781

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

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

退会済みユーザー

退会済みユーザー

2017/08/18 13:08

ありがとうございます、'polls/detail.html'に変更したのですがまだPage not found (404) とエラーが出ます。質問文にさらに情報を追加したのでもしお判りでしたらお願いします。
guest

0

ベストアンサー

確認ですが……urls.pyはpollsアプリ内でのpolls/urls.pyですよね?チュートリアルですと"urls.py"は二か所にあると思いますので、どこのディレクトリのものかも併記しておくと見やすいと思いますよ。

templateフォルダの状況はどうなってますか?
恐らく

templates/ └ polls/ ├ index.html ├ detail.html └ etc

となっていると思います。(もし、templatesフォルダ内にpollsフォルダ以外にpollフォルダがあるなら話は別ですが……)

本題

もしも上記のような状況であるならばviews.py内のdetail関数のelse区内のreturn文の記述

python

1return render(request,'poll/detail.html',{'form':form,'question': obj,})

の'poll/detail.html'が間違いでしょう。正しくは'polls/detail.html'かと

python

1return render(request,'polls/detail.html',{'form':form,'question': obj,})

蛇足

Page Not Foundエラーのとき、urls.pyの設定ミスかviews.pyの設定ミスでhtmlファイルの指定ミスが原因の時に起こりやすい気がします。

投稿2017/08/17 12:19

編集2017/08/17 12:20
RyuSA

総合スコア131

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

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

退会済みユーザー

退会済みユーザー

2017/08/18 13:10

ありがとうございます、'polls/detail.html'に変更したのですがまだPage not found (404) とエラーが出ます。質問文にさらに情報を追加したのでもしお判りでしたらお願いします。
RyuSA

2017/08/18 13:44

むむ、なんと…… ところで、デバッグモードはオンですか?デバッグモードの吐くエラーを教えてもらえませんでしょうか? オフならオンにしてみてください。(setting.pyのDEBUG=Trueならデバッグモード中)デバッグモード中ならプロジェクトにエラーが出ると「ここが間違ってますよ~」と教えてくれるはずです。 自分の力不足で、現状の404 Not Foundエラーの原因がtemplates does not foundなのかurl miss matchなのかはたまた別の原因なのか……判断がつかないのです、申し訳ない。 そして、また蛇足なのですが……pythonの正規表現では、\dの代わりに[0-9]を用いた方が良いと聞いたことあります。(\dだと誤作動の可能性があるそうです)\d+の方が個人的には分かりやすいんですけどね……。 以下リンクです。 https://docs.python.jp/3/library/re.html
退会済みユーザー

退会済みユーザー

2017/08/18 13:58

ありがとうございます。デバックしたところ、 pydev_monkey_qt.pyの def patched_import(name, *args, **kwargs): if patch_qt_on_import == name or name.startswith(dotted): builtins.__import__ = original_import cancel_patches_in_sys_module() _internal_patch_qt() # Patch it only when the user would import the qt module return original_import(name, *args, **kwargs) の return original_import(name, *args, **kwargs) の部分で落ちていました。
退会済みユーザー

退会済みユーザー

2017/08/18 14:01

ちなみに、親アプリのurls.pyがなんだかうまくいっていないようで... from django.conf.urls import include,url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^polls/',include('polls.urls',namespace='polls')), ] と書いたのですが'Specifying a namespace in django.conf.urls.include() without 'とエラーが出ます。これはこちらにも質問しているのですが。 https://teratail.com/questions/88819 もしかしたらこのエラーは親アプリのurls.pyの間違いかもしれません。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問