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. 给html标签加上鼠标划过小手样式

    给html标签加上鼠标划过小手样式 方法:给当前标签增加样式 style="cursor:pointer;" eg:增加返回箭头样式,给箭头增加小手 <span onclic ...

  2. LeetCode算法题-Add Binary(Java实现)

    这是悦乐书的第157次更新,第159篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第16题(顺位题号是67).给定两个二进制字符串,返回它们的总和(也是二进制字符串).输 ...

  3. ArrayList和LinkedList在中间开始插入的快慢比较

    首先创建带数据的两个List, 然后在中间插入数据, 观察完成时间 public class Hero { public static void main(String[] args){ listAn ...

  4. 力扣算法题—052N皇后问题2

    跟前面的N皇后问题没区别,还更简单 #include "000库函数.h" //使用回溯法 class Solution { public: int totalNQueens(in ...

  5. 02.Python网络爬虫第二弹《http和https协议》

    一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...

  6. 【Linux基础】crontab定时命令详解

    周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为“crontab”,是 ...

  7. cents上运行wget报错:unable to resolve host address

    wget命令报错.无法解析域名"www.keepalived.rog" [vagrant@RS1 download]$ wget http://www.keepalived.org ...

  8. [python] 解决pip install download速度过慢问题 更换豆瓣源

    """ python建立pip.ini.py 2016年4月30日 03:35:11 codegay """ import os ini=& ...

  9. show engines 解释

    文章转自https://mariadb.com/kb/en/library/show-engines/#description 1)transaction 是否支持事务 2)XA 事务旨在允许分布式事 ...

  10. class文件魔数CAFEBABE的由来

    https://blog.csdn.net/ustcyy91/article/details/78462378 https://blog.csdn.net/renfufei/article/detai ...