Django入门2:路由系统

1、单一路由对应

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

2、基于正则的路由

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

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

 1 from django.conf.urls import url
 2 from django.contrib import admin
 3 from app01 import views
 4
 5 urlpatterns = [
 6     url(r‘^admin/‘, admin.site.urls),
 7     url(r‘^login‘,views.login),
 8     url(r‘^index‘,views.index),
 9     url(r‘^detail‘,views.detail),
10     # url(r‘^detail-(\d+).html‘,views.detail),
11     url(r‘^home‘,views.Home.as_view()),  #对应类Home的对应方法
12 ]

urls.py:

 1 USER_DICT={
 2     ‘1‘:{‘name‘:‘root1‘,‘email‘:‘[email protected]‘},
 3     ‘2‘:{‘name‘:‘root2‘,‘email‘:‘[email protected]‘},
 4     ‘3‘:{‘name‘:‘root3‘,‘email‘:‘[email protected]‘},
 5     ‘4‘:{‘name‘:‘root4‘,‘email‘:‘[email protected]‘},
 6     ‘5‘:{‘name‘:‘root5‘,‘email‘:‘[email protected]‘},
 7 }
 8
 9 def detail(request):
10     nid=request.GET.get(‘nid‘,None)
11     detail_info=USER_DICT[nid]
12     return render(request,‘detail.html‘,{‘detail_info‘:detail_info})

views.py:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8     <h1>详细信息</h1>
 9     <h6>用户名:{{ detail_info.name }}</h6>
10     <h6>邮箱:{{ detail_info.email }}</h6>
11 </body>
12 </html>

detail.html:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8
 9     <ul>
10         {% for k,v in user_dict.items %}
11             <li><a target=_blank href="/detail?nid={{ k }}">{{ v.name }}</a></li>
12         {% endfor %}
13     </ul>
14
15 </body>
16 </html>

index.html:

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

 1 from django.conf.urls import url
 2 from django.contrib import admin
 3 from app01 import views
 4
 5 urlpatterns = [
 6     url(r‘^admin/‘, admin.site.urls),
 7     url(r‘^login‘,views.login),
 8     url(r‘^index‘,views.index),
 9     # url(r‘^detail‘,views.detail),
10     url(r‘^detail-(\d+).html‘,views.detail),
11     url(r‘^home‘,views.Home.as_view()),  #对应类Home的对应方法
12 ]

urls.py:

 1 USER_DICT={
 2     ‘1‘:{‘name‘:‘root1‘,‘email‘:‘[email protected]‘},
 3     ‘2‘:{‘name‘:‘root2‘,‘email‘:‘[email protected]‘},
 4     ‘3‘:{‘name‘:‘root3‘,‘email‘:‘[email protected]‘},
 5     ‘4‘:{‘name‘:‘root4‘,‘email‘:‘[email protected]‘},
 6     ‘5‘:{‘name‘:‘root5‘,‘email‘:‘[email protected]‘},
 7 }
 8
 9 def detail(request,nid):
10     # nid=request.GET.get(‘nid‘,None)
11     detail_info=USER_DICT[nid]
12     return render(request,‘detail.html‘,{‘detail_info‘:detail_info})

views.py:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8     <h1>详细信息</h1>
 9     <h6>用户名:{{ detail_info.name }}</h6>
10     <h6>邮箱:{{ detail_info.email }}</h6>
11 </body>
12 </html>

detail.html:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8
 9     <ul>
10         {% for k,v in user_dict.items %}
11             <li><a target=_blank href="/detail-{{ k }}.html">{{ v.name }}</a></li>
12         {% endfor %}
13     </ul>
14
15 </body>
16 </html>

index.html:

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

 1 url(r‘^asdfasdfasdf/‘, views.index, name=‘i1‘),
 2 对应在index.html中:
 3 <form action="{% url "i1" %}" method="POST">
 4
 5 url(r‘^index/(\d+)/(\d+)/‘, views.index, name=‘i2‘),
 6 对应在index.html中:
 7 <form action="{% url "i2" 1 2 %}" method="POST">
 8
 9 url(r‘^index/(?P<pid>\d+)/(?P<nid>\d+)/‘, views.index, name=‘i3‘),
10 对应在index.html中:
11 <form action="{% url "i3" pid=1 nid=9 %}" method="POST">
12
13 # 获取当前的URL
14 request.path_info
15
16
17 # 在函数中生成URL
18 def func(request, *args, **kwargs):
19 from django.urls import reverse
20
21 url1 = reverse(‘i1‘) # asdfasdfasdf/
22 url2 = reverse(‘i2‘, args=(1,2,)) # index/1/2/
23 url3 = reverse(‘i3‘, kwargs={‘pid‘: 1, "nid": 9}) # index/1/9/

4、多级路由:根据app对路由规则进行分类
客户端请求先到project/urls.py中进行匹配,匹配到下面的各个app的app/urls.py中。

1 from django.conf.urls import url,include
2 from django.contrib import admin
3
4 urlpatterns = [
5 url(r‘^cmdb/‘, include("app01.urls")),
6 url(r‘^monitor/‘, include("app02.urls")),
7 ]

project/urls.py

1 from django.conf.urls import url,include
2 from django.contrib import admin
3 from app01 import views
4
5 urlpatterns = [
6 url(r‘^login/‘, views.login),
7 ]

app01/urls.py

1 from django.conf.urls import url,include
2 from django.contrib import admin
3 from app02 import views
4
5 urlpatterns = [
6 url(r‘^login/‘, views.login),
7 ]

app02/urls.py

5、默认值(欠)
添加额外的参数

6、命名空间(欠)

时间: 2024-10-28 14:35:59

Django入门2:路由系统的相关文章

Django进阶(路由系统、中间件、缓存、Cookie和Session

路由系统 1.每个路由规则对应一个view中的函数 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage), url(r'^manage/(?P<name>\w*)', views.manage,{'id':333}), 2.根据app对路由规则进行一次分类 rl(r'^web/',include('web.urls')), 1.每个路由规则对应

Django基础之路由系统

Django路由系统分为一级路由和二级路由. 一级路由 静态路由 如下图中admin和home 动态路由 如下图中news,year_news,page(形参)和turbo(实参) 二级路由 1.在全局urls中的路由配置如下: 2.在第二个APP中设置路由如下: 在第二个APP中views如下: 请求结果分别如下: 原文地址:https://www.cnblogs.com/hanxiaobei/p/8322062.html

Django URL(路由系统)

Django URL Django 1.11版本 URLconf官方文档 URL配置(URLconf)就像 Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. 一.URLconf 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 参数说明:

Django之URL路由系统

一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. 基本格式  1 2 3 4 5 from django.conf.urls import url #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数传一个参

13.django入门01(django入门初探视图,模板,路由)

一.django的基本使用流程. pip install django #安装django 创建一个project: django-admin startproject mysite ---mysite ---settings.py ---url.py ---wsgi.py ---- manage.py(启动文件) 给项目起名字: python mannage.py startapp  app01 django-admin.py 是Django的一个用于管理任务的命令行工具,manage.py是

路由系统

路由系统 根据Django约定,一个WSGI应用里最核心的部件有两个:路由表和视图.Django框架 的核心功能就是路由:根据HTTP请求中的URL,查找路由表,将HTTP请求分发到 不同的视图去处理: 路由系统分类很多,常见的有基本单一路由,正则路由,带额外参数路由,二层三层路由还有通过反射机制来完成的动态路由. 1.单一路由 url(r'^index$', views.index), 2.基于正则的路由 url(r'^index/(\d*)', views.index), url(r'^ma

django入门全套(第一部)

本章简介: Django 简介 Django 基本配置 Django url Django view Django 模板语言 Django Form Django Cookie Django Session Django CSRF Django 简介 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的.并于2005年7月在BSD许可证下发布.这套框架是以比

自动化运维Python系列之Django路由系统、Ajax请求

路由系统 路由系统负责分析处理用户请求网址内容,向后视图函数分发处理任务,根据对应的处理函数处理完成后给用户return模板渲染结果:路由系统分类很多,常见的有基本单一路由,正则路由,带额外参数路由,二层三层路由还有通过反射机制来完成的动态路由. 1)单一路由 url(r'^admin/', admin.site.urls) 2)基于正则的路由 url(r'^detail/(\d+)/', views.detail), url(r'^detail2/(?P<p1>\d+)/(?P<x2&

Django学习系列之路由系统

一.基于App的路由 作用: 根据App对路由规则进行分类,在全局urls.py包含某个项目的urls.py 示例 定义全局urls.py(全局路由系统) #导入include from django.conf.urls import url,include from django.contrib import admin #导入app下的view函数 from learn import views urlpatterns = [ url(r'^admin/', admin.site.urls)