リバース()とは何ですか? 質問する

リバース()とは何ですか? 質問する

Django コードを読むと、いくつかのテンプレートで が時々表示されますreverse()。これが何なのかよくわかりませんが、HttpResponseRedirect と一緒に使用されます。これはいつ、どのようにreverse()使用すればよいのでしょうか?

ベストアンサー1

reverse()| Django ドキュメント


urls.py次のように定義したと仮定します。

url(r'^foo$', some_view, name='url_name'),

テンプレートでは、この URL を次のように参照できます。

<!-- django <= 1.4 -->
<a href="{% url url_name %}">link which calls some_view</a>

<!-- django >= 1.5 or with {% load url from future %} in your template -->
<a href="{% url 'url_name' %}">link which calls some_view</a>

これは次のようにレンダリングされます:

<a href="/foo/">link which calls some_view</a>

ここで、 で同様のことを行いたいとしますviews.py。たとえば、 ではない別の URL ( ではない/foo/) を別のビュー ( ではないsome_view) で処理していて、ユーザーを にリダイレクトしたいとします/foo/(多くの場合、フォームの送信が成功した場合)。

次のようにすればいいだけです:

return HttpResponseRedirect('/foo/')

しかし、将来的にURLを変更したい場合はどうすればよいでしょうか?コード内のURLへの参照をすべて更新する必要があります。urls.py これDRY (同じことを繰り返さない)1 か所でのみ編集するという原則と全体的な考え方は、目指すべきものです。

代わりに、次のように言うこともできます。

from django.http import HttpResponseRedirect
from django.urls import reverse
return HttpResponseRedirect(reverse('url_name'))

これは、プロジェクトで定義されているすべての URL を調べて、名前で定義されている URL を探しurl_name、実際の URL を返します/foo/

つまり、URL はそのname属性によってのみ参照されます。URL 自体または参照先のビューを変更する場合は、1 か所だけを編集するだけで変更できますurls.py

おすすめ記事