Django | 有名分组 / 无名分组 / 解析

89 阅读1分钟

无名分组和有名分组

分组

分组:在正则表达式中,使用小括号括起来的内容就是的分组

单独的分组其实是没有意义的,它不影响我们的正常匹配。re模块里面的分组优先原则: re.match()。先把分组的内容显示出来。

无名分组

无名分组:就是把路由地址匹配的数据以未知参数的形式传递给视图函数


url('^test/(\d+)/(\d+)$', views.test)

def test(request, xx, yy):
    print(xx, yy) # 123
    return HttpResponse("test")

有名分组

有名分组:在正则表达式中,使用小括号括起来的内容,起一个名字,这就是有名分组。把路由地址匹配到的数据以关键字参数的形式传递给视图函数。

url('^test/(?P<year>\d+)/(\d+)$', views.test)

?P< 分组名字>

可以在同一个路由地址里面添加多个有名分组。

有名分组和无名分组能一起使用吗?

不能,*args()接收不到数据

有名分组能多次使用吗?

无名分组能多次使用吗?

# 但是无名或者有名单独的可以使用多次
url('^testadd/(?P<year>\d+)/(?P<month>\d+)/(?P<month>\d+)/(?P<month>\d+)$', views.testadd)
url('^test/(\d+)/(\d+)/(\d+)/(\d+)/(\d+)/(\d+)/(\d+)$', views.test),

# django2中的用法
re_path('^test/(\d+)/(\d+)/(\d+)/(\d+)/(\d+)/(\d+)/(\d+)$', views.test),
re_path('^testadd/(?P<year>\d+)/(?P<month>\d+)/(?P<month>\d+)/(?P<month>\d+)$', views.testadd)

解析

后端反向解析

意思是可以给路由起一个名字,然后通过一个方法可以解析出这个名字对应的路由地址

url.py

urlpatterns = [  
path('admin/', admin.site.urls),  
path('proxy/v1/v2', views.proxy, name='proxy'),  
path('test/', views.test),  
]

view.py

def proxy(request, *args, **kwargs):  
print(args)  
print(kwargs)  
return HttpResponse("SUCCESS!____TESTED!")  
  
def test(request):  
print('HOME')  
# 后端反向解析  
print(reverse("proxy"))  
return HttpResponse("HOME")

console

Watching for file changes with StatReloader
System check identified no issues (0 silenced).
August 05, 2023 - 03:49:10
Django version 3.2.20, using settings 'TT.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
HOME
/proxy/v1/v2
[05/Aug/2023 03:49:11] "GET /test/ HTTP/1.1" 200 4

/proxy/v1/v2

前端反向解析

HTML文件

<body>  
  
<a href="{% url 'proxy' %}">  
CLICK  
</a>  
  
</body>

<a href="{% url 'proxy' %}"> 这个是语法重点