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

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

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

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

Python 3.x

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Q&A

解決済

1回答

5270閲覧

Django ルーティングが反映されない

ibu_1224

総合スコア12

Django

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

Python 3.x

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

0グッド

1クリップ

投稿2017/05/03 08:10

Djangoを使用して,ルーティングが反映されていない
Githubからcloneしてきた、djangoProjectファイルを起動させることはできる
(git clone )
http://127.0.0.1:8000/に設定したhtmlファイルはは表示されるのですが、
http://127.0.0.1:8000/test/等のページに はterminal上では、
"GET / HTTP/1.1" 200 と表示されているのですが、webブラウザではページが表示されず困っています。
また、ルーティング設定していない、適当な名前(http://127.0.0.1:8000/ghjkl)などの値にしても
標準で実装されているdebugページが見えず、http://127.0.0.1:8000/の状態から変わりません

githubからcloneしていない、projectではうまく動いているので、githubを経由すると動いていないです。どうかお力添えよろしくお願い致します。

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

python

1#project urls.py 2from django.conf.urls import url,include 3from django.contrib import admin 4 5urlpatterns = [ 6 url(r'^admin/', admin.site.urls), 7 url(r'^', include('home.urls')), 8] 9 10#app urls.py 11from django.conf.urls import url 12from . import views 13 14 15urlpatterns = [ 16 17 url(r'^',views.index, name = 'home_index'), 18 url(r'^test',views.show , name='test'), 19] 20 21 22#setting.py 一部 23DEBUG = True 24 25# Application definition 26INSTALLED_APPS = [ 27 'django.contrib.admin', 28 'django.contrib.auth', 29 'django.contrib.contenttypes', 30 'django.contrib.sessions', 31 'django.contrib.messages', 32 'django.contrib.staticfiles', 33 'home', 34] 35 36 37

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

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

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

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

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

gouf

2017/05/04 21:51

どのGitHub のプロジェクトをクローンしてきましたか?
ibu_1224

2017/05/05 04:13

恥ずかしいのですが https://github.com/ibu1224/testDjango.git で、起きています。admin/にはurlが移動することが確認できています。しかしsampleには移動しないで困っています
guest

回答1

0

ベストアンサー

Django の URL dispatcherの仕組みでは、 urls.py に書かれているURL(正規表現)を上から順番に評価して、最初にマッチしたURLをディスパッチ(URLに対応したviewを実行)します。

python

1# testDjango/urls.py 2urlpatterns = [ 3 url(r'^admin/', admin.site.urls), 4 url(r'^',include('home.urls')), 5 url(r'^sample/',include('sample.urls')) 6]

Djangoプロジェクトの大元の、urls.py は上記のようになってると思います。 これは、それぞれ以下の順番でurlを探すということになります。

1. adminから探す 2. home.urlsから探す 3. sample.urlsから探す

ここで2番目の home.urls に問題があります。

python

1# home/urls.py 2url(r'^',views.index, name = 'home_index'), 3

正規表現に r'^' と書いてあるので、大元のurls.pyの url(r'^',include('home.urls')) と合わさって、「どんなURLでもマッチするURLパターン」 になってしまっているのが問題です。 このURLパターンは全てのURLにマッチするので、これ以降に書かれたURLパターンは全て無視されてしまうのです。

対応としては、「http://127.0.0.1:8000/」 にしかマッチさせないように、書き換える必要があります。

python

1# home/urls.py 2url(r'^$',views.index, name = 'home_index'), # <= 「$」記号が追加された

これで他のURLも表示されるはずです。こういった事を防ぐためにも、基本的にURLパターンの正規表現には行末(末尾)を示す正規表現のメタ文字($ or \z) を最後に追加しておいた方が良いでしょう。

adminのURLがアクセスできたのは、adminの方が先にURLパターンとして記載されていたからです。

参考

https://docs.djangoproject.com/en/1.11/topics/http/urls/#how-django-processes-a-request

投稿2017/05/05 12:32

編集2017/05/05 12:36
tell_k

総合スコア2120

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

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

ibu_1224

2017/05/06 01:43

ありがとうございます。無事解決しました。取り乱してgithub経由で悪くなったと思っていましたが、そんなことはなくURLパターンの正規表現のミスでした、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問