1. ホーム
  2. ジャンゴ

[解決済み】reverse()とは何ですか?)

2022-04-16 07:07:46

質問

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

どのように解決するのですか?

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を変更したい場合はどうすればよいのでしょうか?その場合は urls.py をコード内で参照する必要があります。これは DRY (Don't Repeat Yourself) (ドリー・リピート・ユアセルフ の原則と、一箇所で編集するという全体的な考え方 - これは努力すべきことです。

その代わりと言ってはなんですが。

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

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

これは、URLだけをその name 属性は、URL 自体やそれが参照するビューを変更したい場合、一箇所だけ編集することで可能です -。 urls.py .