逆引きの方法は大きく2通りあります。 両方とも、ビュー関数とテンプレートファイル内から利用することができます。
- ビュー関数名を利用して、対応するURLを逆引きする方法
- URLパターンに名前をつけて、この名前を使って対応するURLを逆引きする方法
1 2 3 4 5 6 | urlpatterns = patterns('', # 名前なしパターン (r'^posts_a/(?P\d+)/$', 'posts.views.detail_a'), # 名前付きパターン url(r'^posts_b/(?P\d+)/$', 'posts.views.detail_b', name='posts-detail'), ... ) |
/posts_a/...が名前なしURLパターン、/posts_b/...が名前付きURLパターンで name='posts-detail'の部分がURLパターンに対する名前になります。名前付きパターンは、 url() 関数を用いてURLパターンを定義することに注意してください。 上記detail_a()、detail_b()に対応したURLをこれらビュー関数から求める方法は、 reverse() を使うことによって実現されます。
1 2 3 | from django.core.urlresolvers import reverse v['urlpath_a'] = reverse("posts.views.detail_a") v['urlpath_b'] = reverse("posts-detail") |
また、テンプレートファイルから逆引きする方法は、 {% url ... %} テンプレート関数を使うことによって、実現されます。
ビュー関数からは、 reverse() , テンプレートファイルからは {% url ... %}を使う、と覚えましょう。