Django第六部分:如何通过正则表达式组名实现关键字参数传递?

2026-06-10 22:501阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计641个文字,预计阅读时间需要3分钟。

Django第六部分:如何通过正则表达式组名实现关键字参数传递?

学习笔记,仅供参考。利用正则的分组命名进行关键字传参,在前面的Blog中,我们都在urls.py里使用位置传参的方式,将路由信息传递给视图函数作为参数,例如:

urls.pypythonurlpatterns=[ path('article//', views.article_detail, name='article_detail'),]

这种方式简单直接,但不够灵活。我们可以通过正则的分组命名来创建更具有描述性的关键字参数,提高代码的可读性和可维护性。例如:

urls.pypythonurlpatterns=[ path('article///', views.article_detail, name='article_detail'),]

Django第六部分:如何通过正则表达式组名实现关键字参数传递?

在这里,`` 和 `` 是正则表达式,分别匹配整数和由字母、数字、下划线组成的字符串。`article_id` 和 `author` 是命名参数,可以直接在视图函数中使用,如下:

views.pypythondef article_detail(request, article_id, author): # 使用article_id和author进行文章详情的处理 pass

学习笔记,仅供参考



利用正则的组名进行关键字传参



在之前的BlOG中,我们在urls.py里都是用位置传参的方式,将路由里的信息传递给视图函数做参数,比如:

urls.py

urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'birthday/(\d{4})/(\d{1,2})/(\d{1,2})/', views.page_birth),
]

views.py

def page_bunny(request, name, age):
html = "Bunny's name is " + name + " and its age is " + age
return HttpResponse(html)

如果我们的地址为:127.0.0.1:8000/birthday/1997/9/28,那么"1997"就会传入year, "9"就会传入month,"28"就会传入day,就相当于这样调用方法:

page_birth(request, "1997", "9", "28")



但是如果我们给正则表达式中的每个组起组名,就相当于是关键字传参,比如:

urls.py

urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'bunny/(?P<age>\d{1,2})/(?P<name>\w+)/', views.page_bunny)

]

views.py

def page_bunny(request, name, age):
html = "Bunny's name is" + name + "and its age is" + age
return HttpResponse(html)

如果我们的地址为:127.0.0.1:8000/bunny/10/huang/,服务器就会响应如下页面:

此时,"10"会被传入age,"huang"会被传入name,就相当于这样调用方法:

page_bunny(request,age = "10", name = "huang")



  • 注意事项


需要注意的是,每个捕获的参数都作为一个普通的python字符串传递给视图。就像上面例子中age获取的是"10"而不是10

本文共计641个文字,预计阅读时间需要3分钟。

Django第六部分:如何通过正则表达式组名实现关键字参数传递?

学习笔记,仅供参考。利用正则的分组命名进行关键字传参,在前面的Blog中,我们都在urls.py里使用位置传参的方式,将路由信息传递给视图函数作为参数,例如:

urls.pypythonurlpatterns=[ path('article//', views.article_detail, name='article_detail'),]

这种方式简单直接,但不够灵活。我们可以通过正则的分组命名来创建更具有描述性的关键字参数,提高代码的可读性和可维护性。例如:

urls.pypythonurlpatterns=[ path('article///', views.article_detail, name='article_detail'),]

Django第六部分:如何通过正则表达式组名实现关键字参数传递?

在这里,`` 和 `` 是正则表达式,分别匹配整数和由字母、数字、下划线组成的字符串。`article_id` 和 `author` 是命名参数,可以直接在视图函数中使用,如下:

views.pypythondef article_detail(request, article_id, author): # 使用article_id和author进行文章详情的处理 pass

学习笔记,仅供参考



利用正则的组名进行关键字传参



在之前的BlOG中,我们在urls.py里都是用位置传参的方式,将路由里的信息传递给视图函数做参数,比如:

urls.py

urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'birthday/(\d{4})/(\d{1,2})/(\d{1,2})/', views.page_birth),
]

views.py

def page_bunny(request, name, age):
html = "Bunny's name is " + name + " and its age is " + age
return HttpResponse(html)

如果我们的地址为:127.0.0.1:8000/birthday/1997/9/28,那么"1997"就会传入year, "9"就会传入month,"28"就会传入day,就相当于这样调用方法:

page_birth(request, "1997", "9", "28")



但是如果我们给正则表达式中的每个组起组名,就相当于是关键字传参,比如:

urls.py

urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'bunny/(?P<age>\d{1,2})/(?P<name>\w+)/', views.page_bunny)

]

views.py

def page_bunny(request, name, age):
html = "Bunny's name is" + name + "and its age is" + age
return HttpResponse(html)

如果我们的地址为:127.0.0.1:8000/bunny/10/huang/,服务器就会响应如下页面:

此时,"10"会被传入age,"huang"会被传入name,就相当于这样调用方法:

page_bunny(request,age = "10", name = "huang")



  • 注意事项


需要注意的是,每个捕获的参数都作为一个普通的python字符串传递给视图。就像上面例子中age获取的是"10"而不是10