关于urls.py
假设test项目下有一个应用模块notes,那么:
test/urls.py:
from django.conf.urls.defaults import *
urlpatterns = patterns(‘ ‘,
(r’^notes/’, include(‘notes.urls’)),
…
)
这样所有匹配/notes/*的访问将转交给notes/urls.py处理。
test/notes/urls.py:
…
urlpatterns = patterns(‘ ‘,
url(r’^list/$’, views.list_notes, name=’note_list’),
url(r’^(?P<note_id>\d+)/$’, views.show_note, name=’note_show’),
)
首先,由于需要反向解析(页面名称->URL),所以要使用url(),而不是原来的tuple。对应url(r’^list/$’, views.list_notes, name=’note_list’), 将匹配/notes/list/的访问指向给views.py中的list_notes()方法,并将’note_list’名称反向解析到/notes/list/的URL,以便在webapp中生成链接。
第二行中的(?P<note_id>\d+)是一个参数定义,其中note_id是参数名,\d+说明此参数是一个数字。其实起到的作用就是将/note/123/这样的url解释成一个调用show_note(request, note_id=123)。如果参数不是数字而是字词,那么\d+应该改为\w+,具体定义可以参考regex规则。