Django urls.py的集中管理配置

以前配置在工程同工程名的urls.py管理所有app的url


文件路徑

缺點:如果url太多就都寫到這裏,很亂,很長,沒有分類。方然系統提供了一個空格'',作用是寫共同的url部分,但是第二個app訪問和映射都不同,先看看這種寫法吧。

from django.conf.urls import patterns, include, url

urlpatterns = patterns('setapp.views',
    url(r'setapp/index/$','index'),
    url(r'setapp/time/$','time'),                       
)

不用的app採用不同的映射組,這樣在多個app的時候就可以用不用分類,放不同url。這裏是一個app沒有必要分開

from django.conf.urls import patterns, include, url

urlpatterns = patterns('setapp.views',
    url(r'setapp/index/$','index'),
    url(r'setapp/time/$','time'), 
)

urlpatterns += patterns('twoapp.views',
    url(r'twoapp/index/$','index'), 
    url(r'twoapp/time/$','time'),                       
)

沒有app,都有自己的urlpattens管理,看起來簡介。但是這個文件中放了所有的,urls映射,我們可不可以把沒有urls映射都放到自己的appurl中呢?答案是可以的。

可以在每個app中創建一個urls.py文件,這樣每個app的url都自己管理了,結構很清楚,但是不覺得還需要外部配置urls.py中寫出找到內部app中urls.py自己的映射。我們在最外部配置文件中的,urls.py中寫出:

from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    url(r'^setapp/',include('setapp.urls')),
       url(r'^twoapp/',include('twoapp.urls')),
)

該映射的意思是

​ 如果你地址中是setapp,就去setapp.urls文件中去找自己具體的映射。

​ 如果你地址中是twoapp,就去twoapp.urls文件中去找自己具體的映射。

所以還需要設置具體。app中的url.py文件,這個文件剛纔我已經提到了。

urlpatterns = patterns('twoapp.views',
    url(r'^index/$','index'),          
)

工程中的映射,可以定位到app映射文件,在app中寫入自己的映射地址。

urlpatterns = patterns('',
    url(r'^twoapp/',include('twoapp.urls')),
)

注意沒有$結束符。沒有匹配完呢,定位到文件所以加上了include定向函數。

Django的每個項目都有一個總的urls.py

但是整個項目的所有的applications中,不同的路由全部結合在總的urls.py會很混亂;

有這樣一種解決方法就是我們在每一個app裏面自己編輯一個urls.py,然後在app內的urls.py裏面定義自己的路由,然後總的urls.py裏include每個app的urls.py文件

like this:

總的urls.py文件,包含兩個app,User和Information

[python] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. from django.conf.urls import include, url  
  2. from django.contrib import admin  
  3. from Home import views  as Home  
  4.   
  5. urlpatterns = [  
  6.     url(r'^admin/', admin.site.urls),  
  7.     url(r'^user/', include('User.urls')),  
  8.     url(r'^information/', include('Information.urls')),  
  9.     url(r'^$', Home.Main, name="Main"),  
  10. ]  

User的urls.py:

[python] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. from django.conf.urls import url  
  2.   
  3. from . import views  
  4.   
  5. urlpatterns = [  
  6.     url(r'^home/(?P<User_id>[0-9]+)/$', views.UserHome, name='UserHome'),  
  7.     url(r'^home/(?P<User_id>[0-9]+)/changeinfo/$', views.Changeinfo, name='Changeinfo'),  
  8.     url(r'^home/(?P<User_id>[0-9]+)/changeimg/$', views.Changeimg, name='Changeimg'),  
  9.     url(r'login/$', views.login, name='login'),  
  10.     url(r'logout/$', views.logout, name='logout'),  
  11. ]  


Infomation的urls.py:

[python] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. from django.conf.urls import url  
  2.   
  3. from . import views  
  4.   
  5. urlpatterns = [  
  6.         url(r'^(?P<Information_id>[0-9]+)/$',views.Information,name='information'),  
  7.         url(r'^essayList/(?P<EssayList_page>[0-9]+)/$',views.EssayList,name="EssayList"),  
  8.         url(r'edit/$', views.edit, name='edit01'),  
  9.         url(r'store/$', views.store, name='edit'),  
  10. ]  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章