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

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

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

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

Python 3.x

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

Q&A

解決済

2回答

4409閲覧

ルートのURLに自身が作成したプロジェクトの対応がうまくいかない

Tatsuo_Iriyama

総合スコア50

Django

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

Python 3.x

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

0グッド

0クリップ

投稿2018/10/03 05:59

編集2018/10/07 00:16

##現状

現在Python3系、Django2.1.2で開発をしようと思いまして、ルートのURLにアクセスできるようにしています。
プロジェクト名はsampleという名前なので/sampleにアクセスしたらトップページが出るようなイメージです。

##現状のコード

views.py

from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse('Hello!!')

urls.py

from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^sample/', include('sample.urls')) url(r'^admin/', admin.site.urls), ]

##問題点

/sampleにアクセスするとPage not foundになります。
おそらく初歩的なミスを犯していると思われますが、なにぶん初めて触るのでよくわかりません。

この問題が解決したら基礎の勉強をしたいと思っています。
とりあえずルートにアクセスできるようにはしてみたいという考えからこのようなことを行なっています。

  1. どう対処すればいいのか教えて頂きたいです。

##追記

構成

mysite #ディレクトリ mysite #ディレクトリ _pycache_ #ディレクトリ _init_.py settings.py url.py wsgi.py sample #ディレクトリ migrations #ディレクトリ _init_.py admin.py apps.py tests.py urls.py views.py db.sqlite3 manage.py

mysite/sample/urls.py

from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^sample/', include('sample.urls')) url(r'^admin/', admin.site.urls) path('sample/', views.index, name='index'), ]

回答をもらいまして、上記のように記載しましたが、
localhost/sampleにアクセスすると404が発生してしまいます。

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

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

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

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

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

Udomomo

2018/10/03 06:40

sample/urls.pyには何を記載していますか?
Tatsuo_Iriyama

2018/10/03 07:03

sample/urls.pyに記載されている内容が現状のコードで掲載しているurls.pyになります。
Udomomo

2018/10/03 07:17 編集

これ以外に、上位や下位のディレクトリにurls.pyはありますか?プロジェクトのディレクトリ構成を知りたいです。
Tatsuo_Iriyama

2018/10/03 07:26

追記の方に構成を記載致しました。
guest

回答2

0

解決法

シンタックスが違います。
Django2.xではURLの設定に正規表現ではなく文字列を使うようになりました。
つまり

url(r'^sample/', include('sample.urls')) ```ではなく

path('sample/', views.index),

当然ですがこの path() とはDjangoの組み込みメソッドでありどこにも定義されていないので、同じファイル内で import する必要があります。よってファイル文頭に

from django.urls import path

### 余談 おそらくDjango1.xのtutorialを見ているので気を付けましょう。Django2でも大部分で変更はありませんが、今回のようなシンタックスの違いがあったりします。 [公式チュートリアル](https://docs.djangoproject.com/ja/2.1/)やほかにもDjangoGirls など日本語も整備された良いチュートリアルがたくさんありますのでそちらを一通りこなすことをお勧めします。

投稿2018/10/08 20:50

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Tatsuo_Iriyama

2018/10/08 23:52

回答ありがとうございます。 Python2.x系に関してだと思われるのですが、 プロジェクトを立ち上げる際に python3 manage.py startapp sample のコマンドで立ち上げたので、私が今立ち上げているプロジェクトはPython3.x系なのでしょうか? だとしたらこの記載は正しいでしょうか? Python2.x系と1.x系で違いがある事は理解しましたが、3.x系との違いはあるのでしょうか? ちなみに回答されたコードを記載してアクセスして見ましたが、出来ませんでした。 アクセス先は、http://127.0.0.1:18000/sample/になります。 エラーは404です。
退会済みユーザー

退会済みユーザー

2018/10/09 00:05

質問について 正しいと思います。python3.x/Django2.xでしょう。多分なんですが、Django2.xはpython2.xには対応していないかと アプリ追加のコマンドも正しいです。python2とpython3ではそこそこ変更点があります。ただDjangoの最新のチュートリアルは全てpython3の文法で書かれていますので気にしなくても大丈夫です。
退会済みユーザー

退会済みユーザー

2018/10/09 00:28

404について 書き直すディレクトリを指定していませんでした。すみませんでした。 1 . mysite/urls.py の urlpatterns に「path('polls/', include('polls.urls')),」 を追加してください。もちろん path, include のimportを忘れないようにしてください。 2. 次に sample/urls.py の urlpatterns に「path('sample/', views.index),」を足してください。 ※ pathのimportに加えて、 「from . import views」で同じsampleディレクトリのviews.pyをimportしてください。でないと、views.indexが認識されません。 これで動くはずですが、もし動かない場合はDjango1.x系の行を削除してください( url(r'', ...) の箇所です)。 何故こう記述するかは是非チュートリアルをやってみてください
Tatsuo_Iriyama

2018/10/11 04:29

追記ありがとうございます。助かりました。 チュートリアルの存在知りませんでした、ありがとうございます。 ぜひやってみようと思います
guest

0

ベストアンサー

それぞれのファイルに以下にように書く必要があります。
(urlspattern内の当該部分以外は省略してあります)

# mysite/urls.py url(r'^sample/', include('sample.urls')) # mysite/sample/urls.py url(r'^content/', views.index)

その後/sample/content/にアクセスします。

---追記---
ディレクトリ構成が並列になっているんですね。

# mysite/sample/urls.py path('sample/', views.index, name='index')

としてください。

---再追記---
やっと手元で動作確認できる環境に来ました。

settings.pyのROOT_URLCONFと、mysite/mysite/urls.pyには何が書いてありますか?
もし初期設定のままであれば、djangoはmysite/mysite/urls.pyの内容を先に読み込みます。
そのため、mysite/sample/urls.pyには以下のように記載すれば良いです。

from django.urls import path from myapp.views import IndexView urlpatterns = [ path('', IndexView.as_view(), name='index'), ]

この状態で、localhost:8080/sample/でページを開けると思います。

投稿2018/10/03 09:17

編集2018/10/08 11:50
Udomomo

総合スコア1524

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

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

Tatsuo_Iriyama

2018/10/03 10:16 編集

mysite/urls.pyには from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ] の中に記述する形でしょうか? ちなみに from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls),  url(r'^sample/', include('sample.urls')) ] をしたら NameError: name 'url' is not defined エラーになりました。
Udomomo

2018/10/04 00:11

よく見たらmysiteとsampleは並列のディレクトリだったんですね。 回答を追記しました。
Tatsuo_Iriyama

2018/10/07 00:13

追記ありがとうございます。 追記分をmysite/sample/urls.pyに from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^sample/', include('sample.urls')) url(r'^admin/', admin.site.urls) path('sample/', views.index, name='index'), ] このように記載したのですが、 /sampleにアクセスすると404が発生します。 なぜなのでしょうか?
Udomomo

2018/10/07 09:45

sample/と最後にスラッシュをつけるとどうなりますか?
Udomomo

2018/10/08 11:50

回答に再追記しました。
Tatsuo_Iriyama

2018/10/08 23:48 編集

追記ありがとうございます。 現状mysite/sample/urls.pyには from django.urls import path from myapp.views import IndexView urlpatterns = [ path('', IndexView.as_view(), name='index'), ] mysite/mysite/settings.pyのROOT_URLCONFには ROOT_URLCONF = 'mysite.urls' mysite/mysite/urls.pyには from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ] と記載しています。 アクセス先は、http://127.0.0.1:18000にアクセスするとDjangoの初期画面が表示される形です。 http://127.0.0.1:18000/sample/にアクセスすると、404が表示されます。 環境構築は、https://qiita.com/192_60_33_2/items/73df25e2dd64217165ae こちらを参考に行いました。 Djangoのサーバーを起動させる時のコマンドは、 python3 manage.py runserver 0:8000 になります。 追記分を記載してもアクセス出来ないが謎です。 時間がかかってしまい、申し訳ありません。
Udomomo

2018/10/09 00:32

mysite/mysite/urls.pyの記述が足りないです。これだとmysite/sample/urls.pyを見に行ってくれません。 urlpatternsの中に、path('sample/', include('sample.urls'))を追加しましょう。includeをインポートするのも忘れないでくださいね。 詳しくはこのページを参考にしてください。 https://docs.djangoproject.com/ja/2.1/intro/tutorial01/#write-your-first-view
Tatsuo_Iriyama

2018/10/11 04:29

参考ページを元にビューを作成する事ができました! 長々と教えて頂きありがとうございます、助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問