目的
現段階(チュートリアル(4))までを復習して、使いこなせるという実感を持ちたい。自分が納得するための備忘録。作業場はtestdirectory、プロジェクト名は littleproject、アプリ名はlitteleappとする。
※注意※ 初心者がわずかな知識で自分なりに解釈しております。間違いが多分に含まれている可能性大いにあります。
環境
ThinkPad T440p
Ubuntu Linux 18.04 日本語 Remix
Python 3.6.7
pip 18.1
Django 2.1.4
view.py と urls.py を言われるがままに作ってきたが…
使いこなせるとは口が裂けても言えない。どこがどうつながり、何をどう変えていいのかさっぱりわからなかったから。urls.pyが2つありごっちゃになってしまう。まずはファイル構成から復習する。
単にアドレスを指定しているだけなので、本社・支社という例えは間違えているのかもしれないが、本社に向かうと出てきたおっちゃんに「よう来たな、兄ちゃん。欲しい情報はアッチにあるからそっちに行ってみてや」と言われてる、そんな感じ。ごっちゃになりがちなurls.pyを単に区別したかったというのもある。ではその本社でやってることは…
django.urls という部署から、「include」 とか 「path」 とかいう助っ人を召喚して、この命令を遂行させている、みたいな感じ。で、支社では何をやっているのか…
同じく助っ人「path」を召喚、同じフロアから「view」さんもやってきている。で、本社よりもさらに詳しく情報の在り処を指示している。そして最終的に現場のview.pyでは…
「HttpResponse」召喚。index関数をつくってる。これが今までのindex.htmlに相当するものらしい。HttpResponseさんは、表示する中身を抱え込んでて、要望があったときのために待機、呼ばれたらお届けします〜と出ていくという感じ。…別に無理に擬人化する必要もなかったな。
views.py と urls.py はどうつながっているか
参考サイト → DJangoのお勉強(1) が私の疑問を解消してくれた。感謝。以下図解してみた。
- littleapp/urls.py の name て何のためにあるんだろうと思っていたら、パスに名前をつけてアドレスと一致させてる(変数にアドレスの文字列を入れてる)ということらしい。reverse関数を使ってアドレスを表示させることも参考サイトに書いてあった。
- littleapp.urls = littleapp/urls.py だった。
- views.index は views.py の index関数のこと。馴染みあるindex.htmlはどこにあるんだろうと疑問だったが関数になっていたのね。
で、この3つの関係がわかったので、こういう改変もできるわけだ。
変更は赤字の部分。見えにくいので下に変更表…って全然大切でもなんでもない。Markdown記法でテーブルを書いてみたかっただけ。
変更前 | 変更後 |
---|---|
littleapp/ | littleaaappp/plus/ |
index | this_is_top_page |
indextop | indextoptop |
結論
- つながりは図を参照のこと
- アドレスはどんな風に変えてもOK
- サイトトップは絶対にindexという名前じゃないといけないわけでもない
- パスのnameも関数名と同じにしないといけないわけでもない
このあたりけっこう無意識の思いこみがあって、それが理解の邪魔をしたりする。アドレスは作成したフォルダと同じ名前じゃなきゃいけないとか、サイトトップはindex.htmlにしなきゃいけないだとか思いこんでた。実はそうでもなくて意外と自由なんだと実感。チュートリアルでは関数名とパスの名前を一緒にしていた。これは簡潔にわかりやすく命名しているということなのだろうけど、同じ名前ゆえに関数がnameにも紐付けられているのかどうかわからなかったんだよなぁ。変数名やらいろいろ変えてみたことで正体がはっきり見えた。あらためてチュートリアルを読み直すと、以前は全然読み取れてなかったところがポロポロ出てきて、オレはいったい何を読んでたのかと。復習大切。
今なら言える、初心者はviews.pyとurls.pyを手に入れた!(…たぶん)、 かしこさが1あがった!(…はず)。