Django路由系统-URL命名&URL反向解析
命名URL和URL反向解析
前言
起始样式,HTML中的href是写死的,不能更改,如下示例代码:
# urls中
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^jjzz/$', views.JJzz.as_view()),
    url(r'^jjzz_index/$', views.Index.as_view()),
    url(r'^jjzz_visit/$', views.Visit.as_view(),name='jz'),
]
# views中
class Visit(View):
    jjzz = 'jjzz on the world'
    def get(self, request,**kwargs):
        # return JsonResponse({'jjzz': self.jjzz})
        return render(request,"jjzz_visit.html")
class Index(View):
    jjzz = 'jjzz on the world'
    def get(self, request,**kwargs):
        # return JsonResponse({'jjzz': self.jjzz})
        return render(request,"jjzz.html")
class JJzz(View):
    def get(self, request):
        return redirect("/jjzz_index/")
# HTML模板中
<body>
<a href="/jjzz/">欢迎来到叽叽喳喳的世界</a>
</body>
 为了解决这种不灵活的情况,Django提供了一种可以自动更新URL而不用手动遍历项目的源代码来搜索并替换对应的URL。可以通过URL的匹配规则起一个名字,一个URL匹配,模式起对应一个名字。
常规URL情况下
第一步:静态路由命名
# urls中
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^jjzz/$', views.JJzz.as_view()),
    url(r'^jjzz_index/$', views.Index.as_view(),name='jjz'),
    url(r'^jjzz_visit/$', views.Visit.as_view()),
]
第二步:reverse反向解析
# views中修改
# 导入reverse功能
from django.urls import reverse
或者 from django.shortcuts import reverse,两个是同一个reverse
class JJzz(View):
    def get(self, request):
        return redirect(reverse('jjz'))
        # 或者return redirect('jjz')
# HTML模板中
<body>
<a href="{% url "jjz" %}">欢迎来到叽叽喳喳的世界</a>
</body>
【总结】只要name不变,前边的正则匹配怎么变都没有关系
分组情况下
第一步:静态路由命名
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^jjzz/$', views.JJzz.as_view()),
    url(r'^jjzz_index/([0-9]{4})/$', views.Index.as_view(),name='jjz'),
    url(r'^jjzz_visit/$', views.Visit.as_view()),
]
第二步:reverse反向解析
# views中
# 导入reverse功能
from django.urls import reverse
class JJzz(View):
    def get(self, request,*args):
        return redirect(reverse('jjz',args=("2019",)))
# HTML模板中
<body>
<a href="{% url "jjzz" '2019'%}">欢迎来到叽叽喳喳的世界</a>
</body>
# 其中
reverse('jjzz',args=("2019",)   —— 》 /jjzz_index/2019/
{% url ‘jjzz’ '2019' %}   —— 》 /jjzz_index/2019/
【总结】
- 利用args传参时要用元组或者列表将参数包括起来
 - 在模板中添加参数时,要用字符串的形式
 
命名分组情况下
第一步:静态路由命名
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^jjzz/$', views.JJzz.as_view()),
    url(r'^jjzz_index/(?P<year>[0-9]{4})/$', views.Index.as_view(),name='jjz'),
    url(r'^jjzz_visit/$', views.Visit.as_view()),
]
第二步:reverse反向解析
# views中
# 导入reverse功能
from django.urls import reverse
class JJzz(View):
    def get(self, request,**kwargs):
        return redirect(reverse('jjz',kwargs={"year":'2019'}))
        # 或者 return redirect(reverse('jjz',args=("2019",)))
# HTML文件中
<body>
<a href="{% url "jjz" year='2019' %}">欢迎来到叽叽喳喳的世界</a>
<a href="{% url "jjz" '2019' %}">欢迎来到叽叽喳喳的世界</a>
</body
# 其中
reverse('jjz',kwargs={"year":'2019'}) --》  /jjzz_index/2019/
{% url "jjz" year='2019' %} --》 /jzzz_index/2019/
命名空间模式
 不同的app中使用相同的URL命名时,使用URL的命名空间模式namespace可以定义唯一反转命名的URL。
【示例】
# 主urls中
from django.conf.urls import url, include
urlpatterns = [
    url(r'^app01/', include('app01.urls', namespace='app01')),
    url(r'^app02/', include('app02.urls', namespace='app02')),
]
# app01的urls中
from django.conf.urls import url
from app01 import views
app_name = 'app01'
urlpatterns = [
    url(r'^(?P<pk>\d+)/$', views.detail, name='detail')
]
# app02的urls中
from django.conf.urls import url
from app02 import views
app_name = 'app02'
urlpatterns = [
    url(r'^(?P<pk>\d+)/$', views.detail, name='detail')
]
虽然上述两个app中url名称重复了,但是反转URL的时候可以通过命名空间的名称得到对应的URL。
语法:
'命名空间名称:URL名称'
 # 模板中使用:
{% url 'app01:detail' pk=12 pp=99 %}
 # views中的函数中使用
v = reverse('app01:detail', kwargs={'pk':11})
这样即使app中URL的命名相同,我们也可以反向解析得到正确的URL。
Django路由系统-URL命名&URL反向解析的更多相关文章
- Django路由系统-分组命名匹配
		
Django路由系统 分组命名匹配  在上述基本配置示例中,使用了简单的正则表达式分组匹配来捕获URL中的值并以位置参数的形式传递给视图,例如url(r'^articles/([0-9]{4})/( ...
 - Django之url上的include,URL命名和反向解析,命名空间
		
include其他的URLconfs #At any point, your urlpatterns can “include” other URLconf modules. This #esse ...
 - Django-静态文件导入/url命名及反向解析
		
一.静态文件导入 js.css.img等都叫做静态文件,那么关于django中静态文件的配置,我们就需要在settings配置文件里面写上这写内容: # STATIC_URL = '/xxx/' #别 ...
 - url的命名与反向解析
		
url命名和反向解析 1. 命名 # url(r'^press_list/$', views.press_list,name='press_list'), url(r'^pre/$', ...
 - 分组,命名分组,url的命名和反向解析
		
1.位置分组 匹配到参数,按照位置参数的方式传递给视图函数 视图函数需要定义形参接收变量 1.写在url里面的: # 删除 url(r'^del_class/(\d+)',views.del_clas ...
 - diango url的命名和反向解析
		
url的命名和反向解析 静态路由 url(r'^login/', views.login,name='login'), 反向解析ht 模板 {% url 'login' %} --> '/app ...
 - URL的命名和反向解析
		
1. 分组 url(r'^del_publisher/(\d+)', views.del_publisher), 匹配到参数,按照位置参数的方式传递给视图函数 视图函数需要定义形参接收变量 2. 命名 ...
 - django url别名和反向解析 命名空间
		
url别名和反向解析 我们平时写的url名字都是死的,如果项目过大,需要项目中某个文件名改动一下,那么改动起来就不是一般的麻烦了,所以我们就在定义的时候给url起一个别名,以后不管哪个文件中运用都是用 ...
 - day58——模板继承、组件、自定义标签和过滤器、inclusion_tag、静态文件配置、url别名和反向解析、url命名空间
		
day58 模板相关 模板继承(母版继承) 1. 创建一个xx.html页面(作为母版,其他页面来继承它使用) 2. 在母版中定义block块(可以定义多个,整个页面任意位置) {% block co ...
 - Django 路由系统
		
Django 路由系统 基本格式 from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 参数说 ...
 
随机推荐
- TETP服务和PXE功能
			
PXE PXE:Preboot Excution Environment, Intel公司研发,没有任何操作系统的主机,能够基于网络完成系统的安装工作.
 - 大数据技术之kettle安装使用
			
kettle是一款开源的ETL工具,纯java编写,可以在Windows.Linux.Unix上运行,绿色无需安装,数据抽取高效稳定. kettle的两种设计 简述: Transformation(转 ...
 - ipvsadm命令用法
			
ipvsadm命令选项 -A 添加虚拟服务器 -E 修改虚拟服务器 -D ...
 - 归类常用控件GroupBox、TabControl、Expander
			
<StackPanel Orientation="Horizontal"> <GroupBox Header="颜色" Margin=&quo ...
 - 富文本编辑器粘贴复制Word
			
tinymce是很优秀的一款富文本编辑器,可以去官网下载.https://www.tiny.cloud 这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用. http ...
 - CF762F Tree nesting
			
题目连接 问题分析 可以给小树钦定一个根, \(Dp[i][j]\) 表示大树上的点 \(i\) 对应到小树上的点 \(j\) 的可能的方案数.然后每一步转移都是一个状压DP(将小树是否被匹配状压,然 ...
 - Scrapy 设置随机 User-Agent
			
方式一:在每个 Spider中设置(针对单个Spider) class TencentSpider(scrapy.Spider): name = 'tencent' allowed_domains = ...
 - TCP窗口扩大选项Window Scale
			
窗口扩大选项使TCP的窗口定义从16bit增加到32bit.这并不是通过修改TCP首部来实现的,TCP首部仍然使用16bit,而是通过定义一个选项实现对16bit的扩大操作来完成的.于是TCP在内部将 ...
 - 【黑马JavaSE】1_1_9_流程控制:顺序结构、判断结构、选择结构、循环结构
			
文章目录 1_1_9_01_ 流程控制概述 1_1_9_01_ 顺序结构 1_1_9_ 判断结构 1_1_9_02_ 判断语句1--if 1_1_9_03_ 判断语句2--if...else 1_1_ ...
 - 最长公共子子串 java
			
package maxCommon; /** * 找到最长公共子串 * @author root */ public class MaxCommonUnSeries { public static v ...