Python+Django笔记之三


关于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规则。