Django3中urls.py里path与re_path的几种用法

本文介绍了Django3中urls.py的path和re_path的使用方法,包括如何捕获url参数,使用转换器如int、slug、uuid和path,以及何时需要使用正则表达式的re_path进行更复杂的路由配置。通过示例展示了如何根据url路径调用不同的视图函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django3的urls.py里的写法和Django1里的写法相差很大。

在Django3的官方文档中,介绍了urls里面使用path和re_path的一些写法。

官方文档的网址:https://docs.djangoproject.com/en/3.0/topics/http/urls/

以下是path的第一个例子:

from django.urls import path

from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

在Django3中,path的语法使用尖括号<>来获取url中的值。捕获值时可以选择是否使用转换器converter,如果不使用转换器,则默认参数的值是字符串。例如上面例子的第一个path。

带转换器的写法的例子是<int:name>,这表示Django从url中获取一个参数(参数在两个/间),参数名是name,将参数值转换为int型。例如上面例子里的<int:year>,假设这个参数是2020的话,则它被转换为int型,名字为year。

Django3支持5种转换器:

  • str
  • int
  • slug,例如building-your-1st-django-site
  • uuid,例如075194d3-6885-417e-a8a8-6c931e272f00
  • path

如果以上的用法还不能满足你对url的要求,也可以使用正则表达式。这时就不能再用path了,需要使用到re_path。

以下是re_path的一个例子,里面最后的一行是嵌套的写法:

from django.urls import path, re_path

from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail),
    re_path(r'^comments/(?:page-(?P<page_number>\d+)/)?$', comments),
]

这时写法类似于Django1种的url写法。

以下是带参数时转向另一个函数的例子:

path('books/', views.books, name='books'),    
path('books/<int:bookid>/', views.book, name='book'),

在这个例子里,当url是ip/xxx/books/时,Django调用views里面的books函数。当urls是ip/xxx/books/2/时,Django调用views里面的book函数,参数名是bookid,参数值是2。注意,这里就不用再在第一个path的books/后面加$了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值