一、Django基於正則表達式的URL
# url(r'^detail-(\d+)-(\d+).html', views.detail), #這和下面的區別是,這兩個數可能會變,按照先后順序獲取
# url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail), #寫死了nid 和uid,接收的參數也要對應着,根據ID一一對應獲取(盡量用這種)
def detail(request,nid,uid):
pass
多個參數時,可以使用這種方式接收參數:def detail(request, *args,**kwargs):
urls.py
url(r'^detail/', views.detail), #改前
url(r'^detail-(\d+).html', views.detail), #改后,路由url寫得好看一點
views.py
def detail(request): #改url.py前的操作
nid = request.GET.get('nid')
detail_info = USER_DICT[nid]
return render(request, 'detail.html',{'detail_info':detail_info})
def detail(request,nid): #改url.py后的操作 url傳了+d參數,所以這邊也要接收一下
detail_info = USER_DICT[nid]
return render(request, 'detail.html',{'detail_info':detail_info})
detail.html
{% for k,row in user_dict.items %} {# 改url.py前獲取的路由? ,看起來以為是動態的 #} <li><a target="_blank" href="/detail/?nid={{ k }}">{{ row.name }}</a></li>#} {% endfor %}
{% for k,row in user_dict.items %} {# 改url.py后獲取的路由-#} <li><a target="_blank" href="/detail-{{ k }}.html">{{ row.name }}</a></li> {% endfor %}
二、對URL路由關系進行命名, ***** 以后可以根據此名稱生成自己想要的URL *****
urls.py
url(r'^asdfasdfasdf/', views.index, name='i1'), url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'), url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),
views.py
from django.urls import reverse
def func(request, *args, **kwargs): url1 = reverse('i1') # asdfasdfasdf/ url2 = reverse('i2', args=(1,2,)) # yug/1/2/ url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # buy/1/9/
xxx.html
{% url "i1" %} # asdfasdfasdf/ {% url "i2" 1 2 %} # yug/1/2/ {% url "i3" pid=1 nid=9 %} # buy/1/9/
{#因為urls.py文件中,路由多添加了name='indexx',所以可以通過這種方式來讀取路由跳轉,防止路由連接改名字也不受影響#}
<form action="{% url 'indexx' 2 %}" method="post"> {# 如果帶有參數,這種跳轉方式也不是很好,因為不是動態跳轉,一直強制在2頁面#}
<form action="{% url 'indexx' nid=1 uid=3 %}" method="post"> {# 如果帶有參數,這種跳轉方式也不是很好,因為不是動態跳轉,一直強制在1/3頁面#}
<p><input type="text" name="user" placeholder="用戶名:"></p>
<p><input type="text" name="email" placeholder="郵箱:"></p>
<input type="submit" value="提交">#}
<form action="{{ request.path_info }}" method="post"> {#動態生成url,沒上面方式這么死板#}
注:
# 當前的URL
request.path_info
三、多級路由分發,include()
project/urls.py
from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^cmdb/', include("app01.urls")), url(r'^monitor/', include("app02.urls")), ]
app01/urls.py
from django.conf.urls import url,include from django.contrib import admin from app01 import views urlpatterns = [ url(r'^login/', views.login), ]
app02/urls.py
from django.conf.urls import url,include from django.contrib import admin from app02 import views urlpatterns = [ url(r'^login/', views.login), ]
寫在最后:
url(r'^business/$',views.business), #最好加上終止符$,否則如:url(r'^business_add/',views.business)不會識別到