路由規則
1.基於正則的url
在templates目錄下創建index.html、detail.html文件
(1)index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% for k,value in user_dict.items %} <li><a href="/detail-{{ k }}.html" target="_blank">{{ value.name }}</a></li> {% endfor %} </body> </html>
(2)idetail.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>詳細信息</h2> <h4>用戶名:{{ detail_info.name }}</h4> <h4>郵箱:{{ detail_info.email }}</h4> </body> </html>
(3)views
from django.shortcuts import render,HttpResponse USER_DICT = { '1':{'name':'root1','email':'root1@xxx.com'}, '2':{'name':'root2','email':'root2@xxx.com'}, '3':{'name':'root3','email':'root3@xxx.com'}, '4':{'name':'root4','email':'root4@xxx.com'}, } def index(request): return render(request,'index.html',{'user_dict':USER_DICT}) def detail(request,nid): detail_info = USER_DICT[nid] return render(request, "detail.html", {"detail_info": detail_info})
(4)urls
from django.conf.urls import url from django.contrib import admin from cmdb import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index), url(r'^detail-(\d+).html/', views.detail), ]
2.正則url分組
(1)url修改
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index), url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/', views.detail), ]
(2)views修改
url中是一個字典的格式,分組對應 {'nid':'\d+','uid':'\d+'}
def detail(request,**kwargs): print(kwargs) # {'nid':1,'uid':4} nid = kwargs.get('nid') detail_info = USER_DICT[nid] return render(request, "detail.html", {"detail_info": detail_info})
(3)login中也要對應
{% for k,value in user_dict.items %} <li><a href="/detail-{{ k }}-4.html" target="_blank">{{ value.name }}</a></li> {% endfor %}
3.request.path_info獲取當前客戶端訪問的路勁
(1)urls
from django.conf.urls import url,include from django.contrib import admin from cmdb import views urlpatterns = [ url(r'^index', views.index), ]
(2)views
def index(request): print(request.path_info) #獲取客戶端當前的訪問鏈接 # / index return render(request,"index.html",{"user_dict":USER_DICT})
(3)inde.html
==> action="{{ request.path_info }}
<form action="{{ request.path_info }}" method="post"> <p><input name="user" type="text" placeholder="用戶名"/></p> <p><input name="password" type="password" placeholder="密碼"/></p> <p><input type="submit" value="提交"/></p> </form>
4.name
對路由關系進行命名,根據此名稱生成自己想要的URL
views
def index(request,*args,**kwargs): return render(request,"index.html")
urls
from django.conf.urls import url from django.contrib import admin from cmdb import views urlpatterns = [ # url(r'^first/', views.index, name='i1'), #第一種 # url(r'^second/(\d+)/(\d+)/', views.index,name='i2'), #第二種 url(r'^third/(?P<pid>\d+)/(?P<nid>\d+)/',views.index,name='i3'), #第三種 ]
index.html
第一種 <form action="{% url 'i1' %}" method="post"> 第二種 <form action="{% url 'i2' 1 2 %}" method="post"> 第三種 <form action="{% url "i3" pid=1 nid=9 %}" method="post"> <p><input name="user" type="text" placeholder="用戶名"/></p> <p><input name="password" type="password" placeholder="密碼"/></p> <p><input type="submit" value="提交"/></p> </form>
5.路由分發
主程序urls.py
from django.conf.urls import url,include from django.contrib import admin from cmdb import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^cmdb/', include('cmdb.urls')), ]
cmdb下的urls.py
from django.conf.urls import url from django.contrib import admin from cmdb import views urlpatterns = [ url(r'^time/',views.time), ]
訪問: http://127.0.0.1:8000/cmdb/time/