redirectとかrenderとかreverseとか違いが分からんかった
ページ遷移メソッドはどれをどう使えばいいのか分からず結構迷った。
ならば色々調べてまとめておこう思い、記事にした。
redirect
単純に指定したURLに遷移したいときに使用する。
def HogeView(request):
return redirect('https://hoge.com/')
サイト内だけでなく、以下のように書けば外部(Google)へ遷移する。
def HogeView(request):
return redirect('https://google.co.jp')
ちなみに引数の「request」は必須。
指定しないと以下のようなエラーを吐き続ける。
Exception Value: HogeView() got multiple values for argument 'pk'
著者はここでどハマりした。
私のpycharmでは引数を使っていないような表示(薄いグレー)だったので、いらないと思い消していた。要注意。
render
こちらも単純に指定したURLに遷移したいときに使用できる。
ただ、redirectとは違い、こちらには template に context を渡す機能がある。
context(コンテキスト)とはテンプレートに渡される「変数名」から「変数の値」 へのマッピングのこと。
def HogeView(request):
return render(request, 'myapp/index.html', { 'name': 'taro', })
上記のように定義すると下記htmlの{{ name }}部分にtaroが代入される。
My first name is {{ name }}
My first name is taro
reverse
URLへの逆変換を行う
url = reverse("myapp:index")
print(url) # / と表示される
<参考>
https://docs.djangoproject.com/en/3.1/topics/http/shortcuts/#django.shortcuts.render
https://teratail.com/questions/50683
https://qiita.com/taole33/items/1dfc0d46462c9e512385
https://teratail.com/questions/90799
https://djangoproject.jp/doc/ja/1.0/ref/templates/api.html