• ルートディレクトリって結局どこ?【このファイルを見ましょう】

    djangoでコードを打っていると、ルートディレクトリはどこなの?って思うことがありますよね。

    そこで今回は、djangoでのルートディレクトリの場所を理解していきましょう。

    ルートディレクトリは、プロジェクトのurls.pyファイルである

    ルートディレクトリは、ドメイン名でアクセスした時にどの場所を指示しているのかということです。

    例えば、アパッチというウェブサーバーの場合は/var/www/htmlが一般的なルートディレクトリです。

    yahoo.co.jpというurlをリクエストした場合、yahoo.co.jpに紐づいているウェブサーバーの中にある/var/www/htmlというフォルダをまず参照するということです。

    そして、djangoの場合、ルートディレクトリはプロジェクトのurls.pyファイルです。

    ただ、これだけではよくわからないですよね。

    ですので、順を追って解説していきます。

    djangoでは、ブラウザにどのようなurlを入れても、まずは同じファイルが参照される。

    djangoと普通のウェブブラウザでは、その仕組みが根本的に異なります。

    ポイントは、djagnoではどのurlがリクエストされても、まずは同じファイルが参照されるということです。

    これをしっかりと理解するために、まずは普通のウェブブラウザでのurlとディレクトリの仕組みをみていきましょう。

    ウェブブラウザでのディレクトリ

    1. https://abc.com/news.htmlの場合

    まずは、https://abc.com/news.htmlファイルにアクセスをした場合です。

    この場合、ウェブブラウザはnews.htmlファイルを取り出します。以下のイメージで確認しましょう。

    ウェブサーバーのファイル取り出し

    news.htmlファイルを下さい。というリクエストが送られると、サーバーの中に入っているnew.htmlファイルが取り出され、それがブラウザに返されます。

    2. https://abc.com/blog/apple.htmlの場合

    次に、上記のようなファイルへのリクエストがあった場合を考えてみましょう。

    この場合は、ウェブサーバーはblogフォルダの中のapple.htmlファイルをブラウザに返します。

    ウェブブラウザの対応

    この場合、news.htmlファイルは関係ありません。

    blogフォルダの中の、apple.htmlファイルが取り出され、ブラウザにレスポンスが返されます。

    まずはウェブサーバーのこのようなイメージ(1対1というイメージが分かりやすいかと思います)を固めましょう。

    djangoでのディレクトリ

    次に、djangoでのファイルの扱いについてみていきましょう。

    djangoでは、いかなるurlであっても、プロジェクトフォルダのurls.pyファイルがまず参照されます。

    例えば、https://abc.com/news.htmlというurlの場合は、このようなイメージです。

    djangoのurlパターンの具体例

    次に、https://abc.com/blog/apple.htmlというurlをリクエストしたとしましょう。その場合はこのようになります。

    djangoのurlの具体的なイメージ

    先ほどの場合と同じですね。これがポイントです。

    どんなurlが来ても、その内容に応じてviews.pyに振り分ける

    結局のところ、いかなるurlがきたとしても、urls.pyファイルがまずはすべてのurlを受け止め、処理をします。

    この仕組みは、一般的なウェブサーバーとは異なります。

    ですので、ウェブサーバーになじみが深いと、djangoのルートディレクトリはurls.pyファイルというイメージがわきづらいのです。

    djangoの場合、urls.pyファイルがまずはリクエストを受けて、そのリクエストの内容に応じて次に呼び出す内容をコントロールしているのです。

    ルートディレクトリを変えることはできる?

    ちなみに、ルートディレクトリを変えることはできるのでしょうか?

    答えは「できる」です。

    settings.pyファイルをみてみましょう。

    コード
    

    ROOT_URLCONF = [xxx.urls]

    このようなコードが書かれているかと思います。

    このROOT_URLCONFこそがルートディレクトリ(ブラウザでリクエストが送られたときに参照するurls.pyファイル)なのです。

    このROOT_URLCONFのxxxの部分を任意のアプリに変えれば、ルートディレクトリを変更することができます。

    普通はルートディレクトリを変えることはありませんが、参考程度に頭に入れておくと良いかもしれません。

    ルートディレクトリのまとめ

    (1) djangoでのルートディレクトリはurls.pyである。

    (2) なぜなら、settings.pyのROOT_URLCONFでそのように設定しているから。

    (3) つまり、ROOT_URLCONFを変更することで、ルートディレクトリを変えることが可能。

    ~Django無料講義~のご案内

    Code for Djangoが、4時間超の無料Django講義をはじめました

    •  ・本を出版したCode for Djangoの
       製作者が作ったサイトです。
    •  ・Code for Djangoの内容も、
       動画で詳しく解説しています。
    •  ・動画は順次ふやしていきますので、
       ただで学び続けることが可能です。
    •  ・Djangoの効率的なスキルアップに、
       是非お役立て下さい。