ライブラリ/フレームワークごとのURL書き換え その2:Djangoの場合
Djangoの場合を調べてみた。Djangoは使ったこと無いんだけど。
URLconfに一元管理で定義。基本パターンでは、正規表現マッチしたパラメータがメソッドの引数になるところ。
urlpatterns = patterns('', (r'^articles/2003/$', 'news.views.special_case_2003'), (r'^articles/(\d{4})/$', 'news.views.year_archive'), (r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'), (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'), )
正規表現で名前付きグループをつかうとそのままパラメータに変換できます。Javaの場合(JSR311やCubby)正規表現で名前付きグループは使えないので、正規表現にDSLっぽいことをやっているってことになります。名前付きグループはC#にもあるけど明示的で私は結構好きです。
urlpatterns = patterns('', (r'^articles/2003/$', 'news.views.special_case_2003'), (r'^articles/(?P<year>\d{4})/$', 'news.views.year_archive'), (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.month_archive'), (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d+)/$', 'news.views.article_detail'), )
あと、完結に書けたり繰り返し出てくるところをまとめたりできて強力な感じ。
参考
">Django オンラインドキュメント和訳:URL ディスパッチャ