djagnoでコードを書いていると、reverseというメソッドが出てくる時がありますよね。
このreverseの考え方が良く分からないという方もいるのではないでしょうか。
そこで今回は、reverseの考え方について分かりやすく解説していきます。
なお、reverseの具体的な使い方について理解したい方は、reverseの使い方について分かりやすく解説【具体的なコード付き】という記事を参考にして下さい。
reverseはレスポンスからviewを呼び出します
結論からお伝えすると、reverseは、普通の流れとは逆で、レスポンスからviewを呼び出すからreverse、という考え方です。
といっても、これだけでは抽象的で良くわかりませんので、ここから詳しくみていきましょう。
reverseの言葉の意味を考える
まずは、reverseという言葉の意味について考えていきます。
reverseは「逆」という意味があります。
では、「逆」というのは何に対して逆なのでしょうか?
その点について考えていきましょう。
一般的なDjangoの流れをおさらい
「逆」に対する「正」について考えていきましょう。
そのポイントは、Djangoにおける処理の流れです。
Djangoでは、urlを受け取ると、まずはurls.pyファイルがそのurlをみて、対応するviewを呼び出し、viewがresponseを返すという流れでした。
例えば、urls.pyファイルの中のurlpatternsがpath('abc/', somefunc, name='some')だったとしましょう。
すると、デフォルトの場合ではlocalhost:8000/abc/というurlをリクエストすることによって、views.pyファイルの中のsomefuncという関数を呼び出すとういう流れです。
つまり、「リクエストからviewを呼びだす」という流れです。
この流れをまずはおさらいしておきましょう。
reverseの具体的なコードを確認
次に、views.pyファイルの中でreverseを使ったコードを確認していきましょう。
一応、urls.pyファイルもまとめて書いておきます。
コード-urls.py
urlpatterns = [
path('abc', somefunc, name='some'),
path('', homefunc, name='home')
]
「home」に関連したコードが書かれていることを注意してみましょう。
このurlは、ホーム画面というイメージを持っていただければと思います。
次にviews.pyファイルです。
コード-views.py
def somefunc(request):
【何らかの処理】
return reverse('home')
最後の行のreturn reverse('home')という部分に注目してください。
このsomefuncが呼び出されると、【何らかの処理】が実行され、'home'に関連したviewが呼び出されるという流れです。
reverseを理解する
再度見ていきましょう。
ここでは、reverse('home')と書かれていますが、これを違う見方で考えていきましょう。
この流れは、レスポンスからviewを呼び出すと言い換えることができます。
なぜなら、リクエストを受け取って何らかの処理をした後に、再度renderメソッドでviewを呼び出しているからです。
普通の流れがリクエストからviewを呼び出すというのに対し、今回はレスポンスからviewが呼び出されました。
だからこそ、「逆」という意味のreverseが使われているのです。
reverseのまとめ
(1) reverseは「逆」という意味
(2) その名の通り、普通とは逆の流れで処理をするということ
(3) 具体的には、リクエストからviewを呼び出すのが正しい流れに対し、レスポンスからviewを呼び出すのがrender