1、单一路由对应

  url(r'^index/', views.index), # FBV
  url(r'^home/', views.Home.as_view()), # CBV

2、基于正则的路由

 url(r'^detail-(\d+).html', views.detail),

 url(^'^detail-(\d+)-(\d+).html',views.detail),
'''
严格按照位置参数的顺序传入参数,如果在实际环境中,def detail(request,nid,uid)在定义时,参数的指定出现差错,则会导致下面的对参数的引用出现错误。
''' url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html', views.detail),
'''
传参时确保了nid=第一个传入的位置参数,uid=第二个传入的位置参数。
'''

  实例1:实现 ?nid={{ id }}的url:

 from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login',views.login),
url(r'^index',views.index),
url(r'^detail',views.detail),
# url(r'^detail-(\d+).html',views.detail),
url(r'^home',views.Home.as_view()), #对应类Home的对应方法
]

urls.py:

 USER_DICT={
'':{'name':'root1','email':'root@live.com'},
'':{'name':'root2','email':'root@live.com'},
'':{'name':'root3','email':'root@live.com'},
'':{'name':'root4','email':'root@live.com'},
'':{'name':'root5','email':'root@live.com'},
} def detail(request):
nid=request.GET.get('nid',None)
detail_info=USER_DICT[nid]
return render(request,'detail.html',{'detail_info':detail_info})

views.py:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>详细信息</h1>
<h6>用户名:{{ detail_info.name }}</h6>
<h6>邮箱:{{ detail_info.email }}</h6>
</body>
</html>

detail.html:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <ul>
{% for k,v in user_dict.items %}
<li><a target=_blank href="/detail?nid={{ k }}">{{ v.name }}</a></li>
{% endfor %}
</ul> </body>
</html>

index.html:

  实例2:实现url-{{ id }} 以这种方式用正则表达式取页面。

 from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login',views.login),
url(r'^index',views.index),
# url(r'^detail',views.detail),
url(r'^detail-(\d+).html',views.detail),
url(r'^home',views.Home.as_view()), #对应类Home的对应方法
]

urls.py:

 USER_DICT={
'':{'name':'root1','email':'root@live.com'},
'':{'name':'root2','email':'root@live.com'},
'':{'name':'root3','email':'root@live.com'},
'':{'name':'root4','email':'root@live.com'},
'':{'name':'root5','email':'root@live.com'},
} def detail(request,nid):
# nid=request.GET.get('nid',None)
detail_info=USER_DICT[nid]
return render(request,'detail.html',{'detail_info':detail_info})

views.py:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>详细信息</h1>
<h6>用户名:{{ detail_info.name }}</h6>
<h6>邮箱:{{ detail_info.email }}</h6>
</body>
</html>

detail.html:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <ul>
{% for k,v in user_dict.items %}
<li><a target=_blank href="/detail-{{ k }}.html">{{ v.name }}</a></li>
{% endfor %}
</ul> </body>
</html>

index.html:

3、为路由映射设置名称
对URL路由关系进行命名, ***** 以后可以根据此名称生成自己想要的URL *****

 url(r'^asdfasdfasdf/', views.index, name='i1'),
对应在index.html中:
<form action="{% url "i1" %}" method="POST"> url(r'^index/(\d+)/(\d+)/', views.index, name='i2'),
对应在index.html中:
<form action="{% url "i2" 1 2 %}" method="POST"> url(r'^index/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'),
对应在index.html中:
<form action="{% url "i3" pid=1 nid=9 %}" method="POST"> # 获取当前的URL
request.path_info # 在函数中生成URL
def func(request, *args, **kwargs):
from django.urls import reverse url1 = reverse('i1') # asdfasdfasdf/
url2 = reverse('i2', args=(1,2,)) # index/1/2/
url3 = reverse('i3', kwargs={'pid': 1, "nid": 9}) # index/1/9/

4、多级路由:根据app对路由规则进行分类
客户端请求先到project/urls.py中进行匹配,匹配到下面的各个app的app/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")),
]

project/urls.py

 from django.conf.urls import url,include
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^login/', views.login),
]

app01/urls.py

 from django.conf.urls import url,include
from django.contrib import admin
from app02 import views urlpatterns = [
url(r'^login/', views.login),
]

app02/urls.py

5、默认值

  url(r'^index/', views.index, {'name': 'root'}),

 def index(request,name):
print(name)
return HttpResponse('OK')

views.py

在url中添加额外的参数后,在对应的视图函数中必须设置相应的形式参数name。在执行该方法时会自动传入默认值‘root'作为实参。

6、命名空间

a. project.urls.py

1
2
3
4
5
6
from django.conf.urls import url,include
 
urlpatterns = [
    url(r'^a/', include('app01.urls', namespace='author-polls')),
    url(r'^b/', include('app01.urls', namespace='publisher-polls')),
]

b. app01.urls.py

1
2
3
4
5
6
7
from django.conf.urls import url
from app01 import views
 
app_name = 'app01'
urlpatterns = [
    url(r'^(?P<pk>\d+)/$', views.detail, name='detail')
]

c. app01.views.py

1
2
3
def detail(request, pk):
    print(request.resolver_match)
    return HttpResponse(pk)

以上定义带命名空间的url之后,使用name生成URL时候,应该如下:

  • v = reverse('author-polls:detail', kwargs={'pk':11})
  • {% url 'author-polls:detail' pk=11 %}

django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而是路由系统变得简洁。

最新文章

  1. 用机器名访问和用Localhost访问时在IE中的区别(备忘)
  2. maven的使用体验
  3. 转载--提高C++性能的编程技术
  4. 对想进入Unity开发新人的一些建议
  5. 什么时候该用NoSQL?
  6. Pyqt QListWidget之缩略图列表
  7. 如何解决Android的SDK与ADT不匹配问题
  8. Thinkphp分页时查询条件保存方法
  9. javaWeb--jsp &amp; jQuery
  10. 黑马程序员_static\访问权限\单例模式 大汇总
  11. m个相同苹果放的n个相同盘子中的算法
  12. ESP8266烧录配置
  13. P2648 赚钱
  14. Netty---入门程序,搭建Websocket 服务器
  15. eclipse中增加多个Tomcat
  16. java 复制Map对象(深拷贝与浅拷贝)
  17. ios Label TextFile 文本来回滚动 包括好用的三方
  18. Android编程 EditView 中如何设置最多可以输入的字符数量 属性 android:ems 与 android:maxLength 的区别
  19. 【题解】CF#855 G-Harry Vs Voldemort
  20. fragment用法

热门文章

  1. python:列表切片知识的总结
  2. Spring Taco Cloud——Controller的创建(含SpringMVC执行过程&amp;SpringBoot&amp;Spring三者解释及关联)
  3. 使用mpvue开发小程序教程
  4. 31.2 try finally使用
  5. 选择排序(C++,Java,Python实现)
  6. CH5701 开车旅行(倍增dp+set)
  7. AJ学IOS 之ipad开发Popover的基本使用
  8. 详解 ServerSocket与Socket类
  9. 视频+图文 String类干货向总结
  10. APP测试和WEB测试区别