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