Django之路由分发反向解析
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之路由分发反向解析的更多相关文章
- Django3 Django 路由分发,反向解析,2.0版本的path
urls配置像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行. 1.简 ...
- Django 的路由层URL 分组 路由分发 反向解析
URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调 ...
- django之路由分组,反向解析,有名,无名分组
路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态的概念 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'test',vi ...
- django路由的反向解析
什么是路由的反向解析 我们的路由都是一个匹配关系,对应一个处理的视图函数, 如果我们的匹配关系发生了变化,那么与之对应的访问地址(可能前端直接url链接, 也可能是后端的redrict跳转)都需要跟着 ...
- Django之路由分发和反向解析
一.路由分发: 路由分发是指:总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系 from django.conf.urls import url,includ ...
- django之路由分发
路由分发决定哪一个路由由哪一个视图函数来处理. 注意:django2.0里的re_path和django1.0里的url除了名字不一样,其他都一样. 简单配置 from django.urls imp ...
- django url别名和反向解析 命名空间
url别名和反向解析 我们平时写的url名字都是死的,如果项目过大,需要项目中某个文件名改动一下,那么改动起来就不是一般的麻烦了,所以我们就在定义的时候给url起一个别名,以后不管哪个文件中运用都是用 ...
- Django框架路由分发-名称空间
目录 一:路由分发 1.路由分发简介 2.总路由分发配置 3.总路由终极配置(不需要导应用路由,直接点应用即可) 4.子路由配置 二:名称空间 1.名称空间应用场景 3.解决方式二>>&g ...
- drf路由分发、解析/渲染模块配置、使用admin、自动序列化配置
目录 drf路由分发配置 解析模块配置 渲染模块配置 浏览器渲染打开 浏览器渲染关闭 结论 drf使用后台admin drf序列化模块 serializers.py: views.py:单查群查 测试 ...
随机推荐
- session 详细解析(转)
转自 https://www.cnblogs.com/blueskycc/p/5524709.html?tdsourcetag=s_pcqq_aiomsg http协议是WEB服务器与客户端(浏览器) ...
- Android项目的targetSDK>=23,在低于Android6.0的部分测试机(类似华为)上运行时出现的系统权限问题
相信大家对Android6.0以上的动态权限已经有所了解,很多童鞋也已经跃跃欲试地将自己项目的targetSDK升级到了23及其以上,很不幸的是我也成为了其中一员,然而我还是图样图森破了,升级之后的问 ...
- wordpress安装后访问博客只显示文字的解决办法
按着网上的教程,买了腾讯云服务器,上面的镜像已经安装好WordPress了.但是发现并不像网上十分钟搭建个人站点等的写的那么简单.遇到了一些问题,下面来详细讲一讲. 首先是用ip地址不能直接访问服务器 ...
- VMare Workstation 安装Ubuntu 虚拟机教程
1.VMware Workstation,选择左上角文件—新建虚拟机,开始新建一台虚拟机,典型的话许多配置为默认设置,因此,这里我选择自定义安装: 2.机硬件兼容性选择默认即可: 3.客户操作系统选择 ...
- LeetCode算法题-Convert a Number to Hexadecimal(Java实现)
这是悦乐书的第219次更新,第231篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第86题(顺位题号是405).给定一个整数,写一个算法将其转换为十六进制.对于负整数,使 ...
- Java入门(七):方法
方法,在日常生活中可以理解成解决问题或处理事情的技巧,一个方法的形成,需要思考和分析,从而形成一步一步的步骤,最后在实际执行过程中验证自己的思路.在Java中,方法的形成亦是如此. 方法,指用于封装一 ...
- 卸载安装node npm (Mac linux )
1. 卸载node npm (1) 先卸载 npm: sudo npm uninstall npm -g (2) 然后卸载 Node.js. (2.1) 如果是 Ubuntu 系统并使用 apt-ge ...
- [福大软工] Z班 团队作业——系统设计 作业成绩
团队作业--系统设计 作业链接 http://www.cnblogs.com/easteast/p/7709763.html 作业情况 这次作业大家完成度都很高,大家的团队分工,任务布置都安排得很到位 ...
- 数据合并处理concat
var data = [ {name: '海门', value: 9}, {name: '鄂尔多斯', value: 12}, {name: '招远', value: 12}, {name: '舟山' ...
- WPF窗体の投影效果
有时候我们需要给WPF窗体加上一个毛边(投影效果) 我们可以在窗体下加上如下代码 <Window.Effect> <DropShadowEffect BlurRadius=" ...