Django的URL寫法


一、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)不會識別到

 


免責聲明!

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



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