【Django】urls.pyの書き方|path、include

Django

(最終更新月:2022年8月)

✔このような方へ向けて書かれた記事となります

「Django pathの使い方が知りたい!」

「Djangoのurls.pyの役割って何?」

「DjangoのURLで気をつけることってなに?」

✔当記事を通じてお伝えすること

  • urls.pyとは?
  • urls.pyの書き方
  • urls.pyで使う変数やメソッド

当記事を最後までご覧いただければ、urls.pyの基本的な書き方がわかるのはもちろん、urls.pyやpathがどのような仕組みで機能しているかまでご理解いただけます。

ぜひ最後までご覧ください。

【著者プロフィール】

profile_icon
【Python歴】11年 x 【Django歴】10年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです。

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです。

✔月9,800円でWebデザインが学べる

デザナルは、Webデザインに苦手意識がある方におすすめのサブスク型スクールです。

特徴は以下の通り。

  • 初期費用不要
  • 教材が使い放題
  • 案件で収入も得られる

デザナルは稼ぎながら学べる、格安のWebデザインスクールです。

>>詳細はこちら<<

安いWebデザインスクール「デザナル」を徹底分析

Django urls.pyとは?

URLとは、ホームページを見る際にブラウザ上部に打ち込む、httpもしくはhttpsから始まる文字列です。

URLを打ち込むことは、該当するページを表示するように要求しているので、HTTPリクエストといいます。

こちらでは、このHTTPリクエストの受け取りにおいて重要なurls.pyについて、以下の2点をお伝えします。

  • urls.pyの役割
  • urls.pyの場所

urls.pyの役割

Djangoのurls.pyは、ユーザーからのHTTPリクエストを受け取り、どのページを表示するかを判断します。

これをルーティングといいます。

具体的には、以下のようなことをおこなっています。

urls.pyがURLとView関数やViewクラスを紐付ける役割を担っています。

urls.pyの場所

urls.pyの場所は主に2つあります。

  • プロジェクトフォルダ
  • アプリフォルダ

HTTPリクエストを受け取ったら、最初にプロジェクトフォルダのurls.pyを見にいきます。

そこの指示に従い、必要があればアプリフォルダのurls.pyにいくという流れです。

.
├── db.sqlite3
├── main #プロジェクトフォルダ
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py #最初に見にいくurls.py
│   └── wsgi.py
├── manage.py
└── myapp #アプリフォルダ
    ├── __init__.py
     #.途中割愛
     #.
     #.
    ├── urls.py #プロジェクトフォルダのurls.pyからの指示により見にくる
    └── views.py

プロジェクトフォルダ内のurls.pyは、プロジェクトの立ち上げ時に自動で生成されます。

アプリフォルダ内のurls.pyは、必要に応じて追加する必要があります。

具体的な書き方を見ていきましょう。

Django urls.pyの書き方

urls.pyを書くために、以下の3つを理解しましょう。

  • ビューをインポートする
  • 変数「urlpatterns」にパスを定義する
  • Djangoでのパスの書き方

順番に見ていきましょう。

ビュー関数やクラスのインポート

icon
icon

ビュー関数やビュークラスをインポートする方法をお伝えします。

以下のどれか1つだけ理解すればインポートは可能ですが、全て目を通しておくと応用がきくようになるので便利です。

  • views.pyそのものをインポートする
  • 一列で関数(もしくはクラス)をインポートする
  • ビュー関数(もしくはクラス)を綺麗に並べる
  • ほかのアプリケーションからインポートする

views.pyをインポートする

以下のコマンドで「views.py」そのものをインポートできます。

from . import views

「.」は記述しているファイルの属するフォルダ(カレントディレクトリ)の意味となります。

ビュー関数やビュークラスは「views.py」に保存されているので、ビュー関数「index」を使用するときは以下のようになります。

from . import views

#ビュー関数は以下のように記述します。
views.index

一列で複数の関数(もしくはクラス)をインポートする

以下のコマンドでビュー関数やビュークラスをインポートできます。

from .views import ビュー関数(ビュークラス), ビュー関数(ビュークラス)

ビュー関数使用するときは以下のとおり。

from .views import index, profile, contact

#ビュー関数は以下のように記述します。
index
profile
contact

ビュー関数(もしくはクラス)を綺麗に並べる

複数の関数やクラスを綺麗に並べたいときは「( )」を使います。

from .views import (

                              ビュー関数(ビュークラス),

                              ビュー関数(ビュークラス),

                               )

ひとつずつ縦に並べることで数が多いときも見やすくなります。

from .views import (
                    index, 
                    profile, 
                    contact,
                    DetailView, #こちらはViewクラスです
                   )

ほかのアプリケーションからインポートする

ほかのアプリからビュー関数やビュークラスをインポートしたいときは以下のように記述します。

from アプリ.views import ビュー関数(クラス)

例えば、accountsアプリからビュー関数「my_login」をインポートするときは、以下のようになります。

from accounts.views import my_login

urls.pyでよく使う変数やメソッド「path」

紐付けたいビュー関数やビュークラスのインポートが完了したら、urls.py内で変数「urlpatterns」を定義していきましょう。

以下のとおりひとつずつ詳しく見ていきます。

  • urlpatterns
  • pathメソッド
  • includeメソッド

urlpatterns

urlpatternsは、パスを要素として持つリスト型の変数です。

ルーティングの役割を担っています。

基本的な書き方としては以下のとおりです。

urlpatterns = [
               path(相対URL, 紐付ける関数(クラス), ページ名)
]

要素であるpathは、ほかのメソッド「re_path」などに置き換えることもできます。

まずはよく使われるpathを詳しく見ていきましょう。

相対URLとは、ドメイン以下のパスのこと。

例えば、当ページであれば、「/django/django-path/」が相対URLです。

対して、絶対URLとはドメインも含む全てのURLパスのことになります。

当ページであれば、「https://itc.tokyo/django/django-path/」が絶対URLです。

path

pathは、Djangoのルーティングを担う大切なメソッドです。

主には2つの書き方があります。

  • path(相対URL, 紐付ける関数(クラス), ページ名)
  • path(相対URL, include(紐付けたいurls.py))

具体例は以下のとおりです。

path(相対URL, 紐付ける関数(クラス), ページ名)

from .views import (
                    mylistview, #ビュー関数
                    MyDetailView, #ビュークラス
                   )

urlpatterns = [
              path("list/", mylistview, name="my-list") #ビュー関数の書き方
              path("detail/", MyDetailView.as_view(), name="my-detail") #ビュークラスの書き方
]

ビュークラスの場合は、ビュークラス名.as_view()となることを覚えておきましょう。

path(相対URL, include(紐付けたいurls.py))については次章でご説明します。

include

「include」メソッドは、ビュー関数ではなく、別のurls.pyと紐付けたいときに使えるメソッです。

実際にはプロジェクトフォルダ内のurls.pyで使われることが多く、アプリ内のurls.pyと紐付けるために使われます。

まずはincludeをインポートします。

from django.url import path, include

こちらの例では「myapp」内のurls.pyと紐付けます。

#プロジェクトフォルダ内のurls.py

urlpatterns = [
              path("myapp/", include("myapp.urls"),
]

includeメソッドの引数は、文字列で記載します。

#アプリフォルダ内のurls.py

from .views import myapp-list

urlpatterns = [
              path("list/", myapp-list, name="myapp-list"),
]

この場合は、「myapp-list」ページの相対URLは、以下のようになります。

/myapp/list/

(応用編)相対URLの書き方

urls.pyの役割は、URLとビュー関数を紐付けること。

こちらでは相対URLの応用した書き方として、URLの中に数値やスラッグを含む方法と、re_pathメソッドについて解説します。

数値により表示するページを変える「int:pk」

ページのテンプレートは変わらないが、中身のデータを変えて表示したい場合があります。

たとえば以下のようなURLを考えます。

https://itc.tokyo/profile/1/

ユーザーごとに割り振られたプライマリーキー「PK」により、どのユーザーのプロフィールを載せるか判別します。

保存されているデータの数だけURLが存在することになるので、いちいち相対パスに数値を打ち込むのは大変です。

以下のように記述することでURLに数値を含められます。

<データ型: 変数名>

具体的には以下のように記述します。

urlpatterns = [
              path("profile/<int:pk>/", profile_view, name="profile"),
]

これはデータの詳細を表示するページ「DetailView」やデータの編集するページ「UpdateView」で使われます。

以下の記事にて詳しく説明しています。

スラッグにより表示するページを変える「slug:slug」

int型を受け取るだけでなく、文字列を受け取る方法もあります。

具体的にはブログ記事のURLに使われることが多いです。

書き方は以下のとおり。

urlpatterns = [
              path("profile/<slug:slug>/", profile_view, name="profile"),
]

関連性のあるモデルフィールドとしてSlugFieldがあります。

以下の記事にて詳しく説明しています。

正規表現で指定する「re_pathメソッド」

相対パスを記述する方法として、正規表現を使う方法があります。

正規表現を使うと以下のような記述になります。

from django.urls import re_path
from .views import email_confirmation

urlpatterns = [
              re_path(r"^email-confirmation/?P<key>[-:\w]+)/$", email_confirmation, name="email-confirmation"),
]

このやり方は、JavaScript系のフレームワークをフロントエンドで使う際などに使われます。

正規表現に限らず、Pythonについて詳しく勉強したい方はUdemyのレッスンもおすすめです。

icon
icon

まとめ:urls.pyの基本はpathメソッド

当記事の内容をまとめます。

  • urls.pyは、URLとViewの紐付けが主な役割
  • urls.pyの書き方は、pathメソッドに正しい値を渡すこと
  • path以外にも、includeやre_pathを覚えておくと便利

Djangoのpathは、urls.pyを記述するうえで重要なメソッドです。

きちんと使い方を覚えて、余計なエラーを減らしましょう。

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

タイトルとURLをコピーしました