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

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

ただいまの
回答率

90.34%

  • Python

    13420questions

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

  • Django

    1866questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 991
退会済みユーザー

退会済みユーザー

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),
]


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/18 22:08

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

    キャンセル

checkベストアンサー

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文の記述

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


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

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

 蛇足

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/18 22:10

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

    キャンセル

  • 2017/08/18 22: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 22: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 23: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の間違いかもしれません。。。

    キャンセル

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

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python

    13420questions

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

  • Django

    1866questions

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