django基礎篇02-url路由系統

django的路由系統:

1、基本用法:

1.path('index', views.index),
# 經過類的方式建立url映射
2.path('home', views.Home.as_view()),
# 經過正則表達式的方式 注意這種方式不能經過path的方式關聯,不然正則表達式無效,經過 from django.conf.urls import url,而後經過url(regx,views,kwargs,name)進行url的正則表達式的匹配
3.url(r'detail-(\d+)',views.detail),
4.url(r'detail-(\d+)-(\d+)',views.detail),
5.url(r'detail-(?P<nid>\d+)',views.detail)

實戰:

1.經過url(r'detail-(\d+)-(\d+)',views.detail)

  urls.pyhtml

 

urlpatterns = [
    url(r'detail-(\d+)-(\d+)',views.detail),
   ]

  views.py正則表達式

# 方式一:
def detail(request,nid,uid):
    pass

# 方式二:
def detail(request,*args,**kwargs):
    pass

以上方式,nid和uid關聯的參數,適合調用參數有關係,好比調用'http://127.0.0.1:8080/detail-1-2',則 nid = 1, uid = 2;方式二的args = (1,2),kwargs = {}django

但是這不是咱們想要的,咱們如何讓nid和uid和傳遞的參數關聯上,仍是經過正則表達式解決參數關聯問題ui

2.經過url(r'detail-(?P<nid>\d+)-(?P<uid>\d+)',views.detail)

  urls.pyurl

urlpatterns = [
    url(r'detail-(?P<nid>\d+)-(?P<uid>\d+)',views.detail)
]

  views.pyspa

# 方式一:
def detail(request,nid,uid):
    pass

def detail(request,uid,nid):
  pass # 方式二: def detail(request,
*args,**kwargs): pass

這樣不管咱們如何更換參數的位置,咱們的獲取的nid都是'/detail-1-2'的第一個參數值,uid始終爲第二個參數值;而纔是方式二的參數變爲 args=() kwargs={'nid': 1,'uid':2}code

 2、進階

1.name(對URL路由關係進行命名,之後能夠根據名稱生成你想要的URL)

  urls.pyhtm

urlpatterns = [
    url('homemodule',views.home,name='m1'),
    url(r'disovermodule/(\d+)/(\d+)',views.discover,name='m2'),
    url(r'messagemodule/(?P<nid>\d+)/(?P<uid>\d+)',views.message,name='m3')    
]    

  views.pyblog

def func(request,*args,**kwargs):
    from django.url import reverse
    
    url1 = reverse('m1')                          #/homemodule/
    url2 = reverse('m2',args=(1,2))             #/discovermodule/1/2
    url3 = reverse('m3',kwargs={'nid':3,'uid':4})    # /messagemodule/3/4

  xxx.html路由

{% url 'm1' %}                #/homemodule 
{% url 'm2' 1 2 %}          #/discovermodule/1/2
{% url 'm3' nid=3 uid=4 %} #/messagemodule/3/4

注意獲取當前URL

request.path_info
相關文章
相關標籤/搜索