設(shè)計(jì) URL 方案Django URL 分發(fā)系統(tǒng)使用了正則表達(dá)式配置模塊,它可以將 URL 字符串模式映射為 Python 方法views。這個(gè)系統(tǒng)允許 UR
Django URL 分發(fā)系統(tǒng)使用了正則表達(dá)式配置模塊,它可以將 URL 字符串模式映射為 Python 方法 views。這個(gè)系統(tǒng)允許 URL 與底層代碼完全脫節(jié),從而實(shí)現(xiàn)最大的控制和靈活性。
urls.py 模塊被創(chuàng)建和定義成 URL 配置的默認(rèn)起點(diǎn)(通過(guò) settings.py 模塊中的 ROOT_URLCONF 值)。URL 配置文件的惟一要求是必須包含一個(gè)定義模式 urlpatterns
的對(duì)象。
這個(gè)職位公告板應(yīng)用程序會(huì)在啟動(dòng)時(shí)打開一個(gè)索引和一個(gè)詳細(xì)視圖,它們可以通過(guò)以下的 URL 映射進(jìn)行訪問:
/jobs
索引視圖:顯示最近的 10 個(gè)職位/jobs/1
詳細(xì)視圖:顯示 ID 為 1 的職位信息這兩個(gè)視圖(索引視圖和詳細(xì)視圖)都是在這個(gè) jobs 應(yīng)用程序的 views.py 模塊中實(shí)現(xiàn)的。在項(xiàng)目的 urls.py 文件中實(shí)現(xiàn)這種配置看起來(lái)如下所示:
1
2
3
4
5
6
7
8
|
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^admin/', include('django.contrib.admin.urls.admin')), (r'^jobs/$', 'djproject.jobs.views.index'), (r'^jobs/(?P< job_id >\d+)/$', 'djproject.jobs.views.detail'), ) |
注意 <job_id>
部分,這在后面非常重要。
最佳實(shí)踐是提取出應(yīng)用程序特有的 URL 模式,并將它們放入應(yīng)用程序自身中。這樣可以取消應(yīng)用程序與項(xiàng)目的耦合限制,從而更好地實(shí)現(xiàn)重用。jobs 使用的應(yīng)用程序級(jí)的 URL 配置文件如下所示:
1
2
3
4
5
6
|
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^$', 'djproject.jobs.views.index'), (r'^(?P< job_id >\d+)/$', 'djproject.jobs.views.detail'), ) |
由于 view 方法現(xiàn)在都是來(lái)自同一個(gè)模塊,因此第一個(gè)參數(shù)可以使用這個(gè)模塊的根名稱來(lái)指定 djproject.jobs.views,Django 會(huì)使用它來(lái)查找 index
方法和 detail
方法:
1
2
3
4
5
6
|
from django.conf.urls.defaults import * urlpatterns = patterns('djproject.jobs.views', (r'^$', 'index'), (r'^(?P< object_id >\d+)/$', 'detail'), ) |
嘗試上面的 jobs URL 會(huì)返回到這個(gè)項(xiàng)目中,因?yàn)樗鼈兪鞘褂?nbsp;include
函數(shù)將其作為一個(gè)整體來(lái)實(shí)現(xiàn)的。應(yīng)用程序級(jí)的 URL 被綁定到下面的 /jobs
部分:
1
2
3
4
5
6
|
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^admin/', include('django.contrib.admin.urls.admin')), (r'^jobs/', include('djproject.jobs.urls')), ) |
如果現(xiàn)在嘗試使用測(cè)試服務(wù)器來(lái)訪問索引頁(yè)(http://localhost:8000/jobs),會(huì)得到一個(gè)錯(cuò)誤,因?yàn)檎谡{(diào)用的視圖(djproject.jobs.views.index)不存在。
Python交流群
635448130點(diǎn)擊加入群聊UI設(shè)計(jì)交流群
579150876點(diǎn)擊加入群聊Unity交流群
495609038點(diǎn)擊加入群聊HTML5交流群
645591648點(diǎn)擊加入群聊