0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

素人基盤エンジニアがDockerでDjangoを触るシリーズ④:urls.py

Last updated at Posted at 2020-05-05

TL;DR

素人基盤エンジニアがDockerでDjangoを触るシリーズ③:django adminの続き。
1から読みたい場合は↓こちら。
素人基盤エンジニアがDockerでDjangoを触るシリーズ①:DockerでDjangoを作る
今回もDjango Girlsのサンプルを作りながらdjangoと戯れる。
ユーザがアクセスしてきたURLによって処理を行うviewを決定するために使う、urls.pyというファイルについて学ぶ。元々その③と一緒に投稿しようとしていたが長すぎて分割したという経緯もあり、短めな回。

urls.py

ユーザがアクセスしたURLに対してどのviewで処理するかを決めるために、urls.pyというファイルを編集してマッピングを行う必要がある。
第三回までの手順をなぞっていると、http://IPADDRESS:8000にアクセスしたとき、まだロケットのページが見えていると思うが、これはurls.pyを編集していないため。(TemplateやViewも必要だが。。)

①プロジェクトのurls.pyの編集

urls.py

さっそく編集しよう。…と思ったところで異変に気付く。
下記はデフォルトのurls.py。

composeexample/urls.py
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

django 1.X系では、URLを指定する際、django.conf.urls.urlというメソッドを使い、正規表現を利用してURLを表現してやる必要があった。django 2.X系からはパスコンバータという機能が備わっていて、正規表現を使わないでもこのファイルを記載できるようになっているらしいのだが、私の環境ではなぜかデフォルトのひな型が1.X系のものになっているようだった。
Django Girlsのサンプルも2.X系の書き方になっているし、どちらかといえば新しいほうがいいだろう。。
今回起動しているdjangoのバージョンは2.2.12なので、パスコンバータは問題なく動作するはず。ということで中身をそっくりそのまま下記に書き換えてしまう。

composeexample/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

よくわかる解説

from django.contrib import admin

デフォルトのadmin画面のモデルを指定する際に利用するモジュール。

from django.urls import path, include

pathは前述したパスコンバータを利用するためのメソッド。1.X系のurlと比べて、正規表現を利用せずに指定できていることがわかる。
includeは、別のurlsファイルへ転送するためのメソッド。blogに関する設定はできる限り一つのディレクトリにまとめたほうがわかりやすいということもあり、今回はルートパスへのアクセスはすべてblog/urls.pyに記載した設定を反映することとする。

②アプリケーションのurls.pyの編集

urls.py

ということで、blogディレクトリの下に新しくurls.pyというファイルを作成し、下記の通り記載する。

blog/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),
]

よくわかる解説

from . import views

同一ディレクトリ上のviews.pyをimportする。

urlpatterns = [
    path('', views.post_list, name='post_list'),
]

ルートパスにアクセスが来た場合、views.pyの中の、post_listで処理を行う。

もちろん、post_listなぞまだ作ってすらいないので、この状態で起動をするとエラーが発生する。

次回はお待ちかねのViewを作成していく。あと少しでwebアプリケーションが出来上がる予定なので、頑張っていこう。
つづく

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?