Django路由分发|反向解析

  当一个Django中有多个app时,路由会有很多,将这些路由都写在与项目同名的文件夹下就会显得很多,很乱.并且在协同开发的时候容易出现相同的命名,当项目合并后就会出现路由跳转的问题.此时使用路由分发就可以很好的解决这个问题.

  路由分发使用方法如下:

    1. 先在项目同名的文件夹下导入include模块:

from django.conf.urls import url, include

    2. 在urlpatterns中添加如下代码:

url(r'app01/', include('app01.urls', namespace='app01'))

  路由分发:

 from django.conf.urls import url
from app01 import views urlpatterns = [
url(r'^(grade|student|teacher)_list/$', views.Show.as_view(), name='show'), # 展示
url(r'^add_(grade|student|teacher)/$', views.Add.as_view(), name='add'), # 添加
url(r'^delete_(grade|student|teacher)/(\d+)/$', views.Delete.as_view(), name='delete'), # 删除
url(r'^edit_(grade|student|teacher)/(\d+)/$', views.Edit.as_view(), name='edit'), # 删除
]  

  其中 r'app01' 中的app01为每个app的名字, 'app01.urls'为app01文件夹中的urls.py文件,他的内容为当前app所有的路由都在里边, namespace='app01'是给当前的路由名字,防止后续出现同名是出现覆盖情况,导致跳转问题.

反向解析

  反向解析传参

    在视图函数中,位置传参时,使用args=(xx, oo)的方式,也就是说,传过去的参数必须是元祖,否则会报错.

 class Delete(View):

     def get(self, request, kind, id):
very_kind = getattr(models, kind.capitalize())
very_kind.objects.get(id=id).delete() return redirect(reverse('app01:show', args=(kind,)))

  

  使用反向解析时,必须根据之前的url分组进行传参.无名分组使用位置传参,有名分组使用关键字传参.

  在模板中使用时,根据url的分组数量进行传参,必须一一对应.

 {% extends 'base_list.html' %}

 {% block title_title %}
班级展示
{% endblock %} {% block title_add %}
<h1 style="text-align: center; color: burlywood;">班级展示</h1>
<a href="{% url 'app01:add' 'grade' %}">添加班级</a>
{% endblock %} {% block table_show %}
<table border="1" class="table table-bordered" style="text-align: center; background-color: rgba(0, 0, 0, 0); border: #23527c">
<thead>
<tr style=" border: #23527c">
<th style="text-align: center; border: #23527c">序号</th>
<th style="text-align: center; border: #23527c">ID</th>
<th style="text-align: center; border: #23527c">班级</th>
<th style="text-align: center; border: #23527c">操作</th>
</tr>
</thead>
<tbody>
{% for grade in grade_list %}
<tr style=" border: #23527c">
<td style=" border: #23527c">{{ forloop.counter }}</td>
<td style=" border: #23527c">{{ grade.id }}</td>
<td style=" border: #23527c">{{ grade.name }}</td>
<td style=" border: #23527c">
<a href="{% url 'app01:delete' 'grade' grade.id %}">删除</a>
<a href="{% url 'app01:edit' 'grade' grade.id %}">编辑</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

  总结下:

 1. 在视图中应用
from django.urls import reverse reverse('press_list') ——》 '/press_list/' '/pre/' 分组:
reverse('home',args=('','')) ——》'/app01/home/2008/09/' 命名分组:
reverse('home',args=('','')) ——》'/app01/home/2008/09/'
reverse('home',kwargs={'year':'','month':''}) 2. 在模板中的应用 {% url 'press_list' %} ——》 '/press_list/' '/pre/' 分组:
{% url 'home' '' '' %} ——》'/app01/home/2008/10/' 命名分组:
{% url 'home' '' '' %} ——》'/app01/home/2008/10/'
{% url 'home' month='' year='' %} ——》'/app01/home/2018/10/' 2. namespace
url(r'app02/', include('app02.urls',namespace='app02')),
url(r'app01/',include('app01.urls',namespace='app01')), reverse('app01:home',kwargs={'year':'','month':''})
reverse('app02:home',kwargs={'year':'','month':''}) {% url 'app02:home' '' '' %}

Django之路由分发反向解析的更多相关文章

  1. Django3 Django 路由分发,反向解析,2.0版本的path

    urls配置像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行. 1.简 ...

  2. Django 的路由层URL 分组 路由分发 反向解析

    URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调 ...

  3. django之路由分组,反向解析,有名,无名分组

    路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态的概念 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'test',vi ...

  4. django路由的反向解析

    什么是路由的反向解析 我们的路由都是一个匹配关系,对应一个处理的视图函数, 如果我们的匹配关系发生了变化,那么与之对应的访问地址(可能前端直接url链接, 也可能是后端的redrict跳转)都需要跟着 ...

  5. Django之路由分发和反向解析

    一.路由分发: 路由分发是指:总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系 from django.conf.urls import url,includ ...

  6. django之路由分发

    路由分发决定哪一个路由由哪一个视图函数来处理. 注意:django2.0里的re_path和django1.0里的url除了名字不一样,其他都一样. 简单配置 from django.urls imp ...

  7. django url别名和反向解析 命名空间

    url别名和反向解析 我们平时写的url名字都是死的,如果项目过大,需要项目中某个文件名改动一下,那么改动起来就不是一般的麻烦了,所以我们就在定义的时候给url起一个别名,以后不管哪个文件中运用都是用 ...

  8. Django框架路由分发-名称空间

    目录 一:路由分发 1.路由分发简介 2.总路由分发配置 3.总路由终极配置(不需要导应用路由,直接点应用即可) 4.子路由配置 二:名称空间 1.名称空间应用场景 3.解决方式二>>&g ...

  9. drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置

    目录 drf路由分发配置 解析模块配置 渲染模块配置 浏览器渲染打开 浏览器渲染关闭 结论 drf使用后台admin drf序列化模块 serializers.py: views.py:单查群查 测试 ...

随机推荐

  1. Apache中httpd.conf文件的详解

    PHP中,Apache的配置至关重要,特别是httpd.conf这个文件,它是Apache中的核心文件.好了,废话不说,今天将这个文件中的一些内容讲解一番. ServerRoot "d:/w ...

  2. LeetCode算法题-Valid Anagram(Java实现)

    这是悦乐书的第198次更新,第205篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第61题(顺位题号是242).给定两个字符串s和t,写一个函数来确定t是否是s的anag ...

  3. html 标签学习(续)

    一.基础标签补充 1.div 标签和span标签 (没有特别的样式,常用) div标签用来定义一个块级元素,并无实际的意义.主要通过CSS样式为其赋予不同的表现. span标签用来定义内联(行内)元素 ...

  4. C#基础知识之string[ ] args

    转载:http://blog.sina.com.cn/s/blog_8b7263d1010172jv.html C#控制台程序中static void Main(string[ ] args) str ...

  5. Nginx 安装配置

    Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. ...

  6. 最短路 summary

    有四种类型: 单源:dij,spfa,bellman-ford 多源:floyd dij有两种: 一个复杂度为n^2,一个复杂度是m*logn 畅通工程续 某省自从实行了很多年的畅通工程计划后,终于修 ...

  7. 洛谷P1904

    法一,数字太大,可能通过不了   #include <iostream>#include <algorithm>#include <cstdio>using nam ...

  8. centos7下安装docker(21docker swarm集群创建)

    创建swarm集群: 实验环境:盗图 swarm-manager是manager node,swarm-worker1和swarm-worker2是worker node. 所有节点的docker版本 ...

  9. L2-010 排座位 (并查集)

    这里唯一需要注意的是,各个输出的条件在题目中有点描述模糊. 是朋友关系,(不管是不是间接朋友关系) 既不是朋友也不是敌人(这里不用管是不是间接朋友) 是敌人关系,同时是间接朋友关系 是单纯的敌人关系, ...

  10. 字符串相关的hash值(一)