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)不会识别到

原文地址:https://www.cnblogs.com/hjy123/p/12957489.html