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

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

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

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

Python

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

Q&A

解決済

1回答

19513閲覧

Django: NoReverseMatch at /を解決したい

hiro_weedslayer

総合スコア15

Django

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

Python

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

0グッド

0クリップ

投稿2017/01/22 00:49

###前提・実現したいこと
こちらを参考にDjangoをつかってブログを作ろうとしています。名前からも察する通りマッチしたページが無いとのことなのですが、具体的に何が原因でこのようなエラーに至っているのか。そして具体的な解決策が思いつかないまま数時間が経ってしまったので質問させて頂きました。

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

[22/Jan/2017 09:23:54] "GET /14 HTTP/1.1" 404 2239 Internal Server Error: / Traceback (most recent call last): File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 39, in inner response = get_response(request) File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response response = self._get_response(request) File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response response = self.process_exception_by_middleware(e, request) File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Users/hironorisama/Projects/github/ryugaku_otaku/blog/views.py", line 8, in post_list return render(request, 'blog/post_list.html', {'posts': posts}) File "/usr/local/lib/python3.5/site-packages/django/shortcuts.py", line 30, in render content = loader.render_to_string(template_name, context, request, using=using) File "/usr/local/lib/python3.5/site-packages/django/template/loader.py", line 68, in render_to_string return template.render(context, request) File "/usr/local/lib/python3.5/site-packages/django/template/backends/django.py", line 66, in render return self.template.render(context) File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 208, in render return self._render(context) File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 199, in _render return self.nodelist.render(context) File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 994, in render bit = node.render_annotated(context) File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated return self.render(context) File "/usr/local/lib/python3.5/site-packages/django/template/loader_tags.py", line 174, in render return compiled_parent._render(context) File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 199, in _render return self.nodelist.render(context) File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 994, in render bit = node.render_annotated(context) File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated return self.render(context) File "/usr/local/lib/python3.5/site-packages/django/template/loader_tags.py", line 70, in render result = block.nodelist.render(context) File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 994, in render bit = node.render_annotated(context) File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated return self.render(context) File "/usr/local/lib/python3.5/site-packages/django/template/defaulttags.py", line 209, in render nodelist.append(node.render_annotated(context)) File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated return self.render(context) File "/usr/local/lib/python3.5/site-packages/django/template/defaulttags.py", line 439, in render url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) File "/usr/local/lib/python3.5/site-packages/django/urls/base.py", line 91, in reverse return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) File "/usr/local/lib/python3.5/site-packages/django/urls/resolvers.py", line 392, in _reverse_with_prefix (lookup_view_s, args, kwargs, len(patterns), patterns) django.urls.exceptions.NoReverseMatch: Reverse for 'blog.views.post_detail' with arguments '()' and keyword arguments '{'pk':not found. 0 pattern(s) tried: []

イメージ説明

###該当のソースコード

post_list.html

1 <!-- post_list.html --> 2{% extends 'blog/base.html' %} 3 4{% block content %} 5 {% for post in posts %} 6 <div class="post"> 7 <div class="date"> 8 {{ post.published_date }} 9 </div> 10 <h1><a href="{% url 'blog.views.post_detail' pk=post.pk %}">{{ post.title }}</a></h1> 11 <p>{{ post.text|linebreaks }}</p> 12 </div> 13 {% endfor %} 14{% endblock content %}

post_detail.html

1 <!-- post_detail.html --> 2{% extends 'blog/base.html' %} 3 4{% block content %} 5 <div class="post"> 6 {% if post.published_date %} 7 <div class="date"> 8 {{ post.published_date }} 9 </div> 10 {% endif %} 11 <h1>{{ post.title }}</h1> 12 <p>{{ post.text|linebreaks }}</p> 13 </div> 14{% endblock %}

views.py

1# views.py 2from django.shortcuts import render 3from django.shortcuts import render, get_object_or_404 4from django.utils import timezone 5from .models import Post 6 7def post_list(request): 8 posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') 9 return render(request, 'blog/post_list.html', {'posts': posts}) 10 11def post_detail(request, pk): 12 post = get_object_or_404(Post, pk=pk) 13 return render(request, 'blog/post_detail.html', {'post': post})

urls.py

1#urls.py 2from django.conf.urls import include, url 3from . import views 4 5urlpatterns = [ 6 url(r'^$', views.post_list), 7 url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail), 8]

base.html

1 <!-- base.html --> 2{% load staticfiles %} 3<html> 4 <head> 5 <title>RYUOTA</title> 6 <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> 7 <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"> 8 <link href='//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext' rel='stylesheet' type='text/css'> 9 <link rel="stylesheet" href="{% static 'css/blog.css' %}"> 10 </head> 11 <body> 12 <div class="page-header"> 13 <h1> 14 {% load static %} 15 <img src="{% static "images/ryuota-logo.png" %}" alt="My image"/> 16 </h1> 17 </div> 18 19 <div class="content container"> 20 <div class="row"> 21 <div class="col-md-8"> 22 {% block content %} 23 {% endblock %} 24 </div> 25 </div> 26 </div> 27 </body> 28</html>

###試したこと
参考にしているサイトを参考にしながら誤りがないかもう一度やり直してみる。
<a href="{% url 'blog.views.post_detail' pk=post.pk %}">{{ post.title }}</a>を取り除くと正常にページが表示されることからblog.views.post_detail関数にマッチしたページが無いためにエラーが起きているものだと思われる。

###補足情報(言語/FW/ツール等のバージョンなど)
python 3.5.2

$ pip list appnope (0.1.0) beautifulsoup4 (4.5.1) bleach (1.5.0) chardet (2.3.0) cssselect (1.0.0) decorator (4.0.11) dj-database-url (0.4.1) dj-static (0.0.6) Django (1.10.4) django-contrib-comments (1.7.3) django-toolbelt (0.0.1) filebrowser-safe (0.4.6) future (0.16.0) grappelli-safe (0.4.5) gunicorn (19.6.0) html5lib (0.9999999) ipython (5.1.0) ipython-genutils (0.1.0) lxml (3.7.1) Mezzanine (4.2.2) oauthlib (2.0.1) olefile (0.44) pexpect (4.2.1) pickleshare (0.7.4) Pillow (4.0.0) pip (9.0.1) prompt-toolkit (1.0.9) psycopg2 (2.6.2) ptyprocess (0.5.1) Pygments (2.1.3) PyMySQL (0.7.9) pytz (2016.10) requests (2.12.3) requests-oauthlib (0.7.0) selenium (3.0.2) setuptools (25.2.0) simplegeneric (0.8.1) six (1.10.0) slackbot (0.4.1) slacker (0.9.30) static3 (0.7.0) traitlets (4.3.1) tzlocal (1.3) wcwidth (0.1.7) websocket-client (0.40.0) wheel (0.29.0) whitenoise (3.2.2)

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

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

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

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

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

guest

回答1

0

ベストアンサー

urlタグで指定するべき値が間違っているのが原因だと思います。

参考サイトのDjangoバージョン: 1.6.4 ここから確認
hiro_weedslayerさんのDjangoバージョン: 1.10.4

Django1.10.x系におけるurlタグについてのドキュメントには、「呼び出す関数」ではなく**「urls記述時に指定されたname」**を呼ぶように書かれています。
※Django1.8のタイミングで挙動が変わったぽいです。

  • urls.py: nameを付与
  • post_list.html: 関数の代わりに上で付与したnameを指定

で動くと思うので、試してみてください。

投稿2017/01/22 04:40

attakei

総合スコア2738

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問