URLConf Tip 01 - キャプチャの有無にかかわらず同一のviewで処理する
Djangoで作成したサイトのURLを設定するのはurls.pyに記述します。
普段使っている例を見てみましょう。
urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^$', 'appname.views.index'),
(r'blog/', include('blog.urls')),
(r'photo/$', 'photo.views.index'),
(r'photo/(?P<id>\d+)/$', 'photo.views.index'),
)
が、しかし少し変なところに気がつきませんか?
(r'photo/$', 'photo.views.index'),
(r'photo/(?P<id>\d+)/$', 'photo.views.index'),
のところです。
違う処理を定義しているはずなのに同一のviewを指定しています。
これでは正しくサイトを運用することが出来ません。
もうひとつのviewを作成して対応したいが、事情でひとつのviewで処理を行わなければならない。
そのような時、正規表現の前方一致検索を加えることによって実現できます。
(r'photo/(?:(?P<id>\d+)/)?$', 'photo.views.index'),
これにより、/photo/でアクセスしても/photo/3/でアクセスしても同一のviewで処理することが可能になります。