2.Django路由規則


路由規則

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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM