Django Urls
出典: UeblogWiki
目次 |
Tips
URL逆引き機能
url関数, permalink, reverse, {% url %}を使うことにより、 urls.py,views.py, テンプレート内で重複をさけることができます。
- UnohLabにおける紹介
urls.pyで使う正規表現のパターン
| url | 対応する正規表現 | views関数に渡される引数 |
|---|---|---|
| /blog/entry/1/ | ^blog/entry/(P?<id>\d+)/$ | id = 1 |
| /blog/slug/hoge/ | ^blog/slug/(?P<slug>[-\w]+)/$ | slug = hoge |
| /blog/2007/08/31/ | ^blog/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/$ | year=2007, month=08, day=31 |
| /blog/2007/jan/20/ | ^blog/(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\d{2})/$ | year=2007, month=jan, day=20 |
include
includeを使うことでurls.pyの定義を取り込めます。プロジェクト直下のurls.pyは、このincludeを使って各アプリのurls.pyを取り込むことが多いです。
各アプリのurls.pyはmanage.pyでアプリを作ったときに自動的に生成されないので、自分で作る必要があります。
例
% python manage.py startapp blog
blog/__init__.py, blog/models.py, blog/views.py が生成されるが blog/urls.pyは生成されない
# myproject/urls.py
urlpatterns = patterns('',
(r'^blog/', include('blog.urls')), #myproject/blog/urls.pyの定義を読み込む
)
# myproject/blog/urls.py を新規に作成
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^$', 'blog.views.index'), #http://www.yourdomain.com/blog/に対応
(r'^archive/$', 'blog.views.archive'), #http://www.yourdomain.com/blog/archive/に対応
)
http://www.yourdomain.com/blog/まではmyproject/urls.pyで定義されているので、includeで呼び出すmyproject/bbs/urls.pyではその続きを定義すればよいのです。
