为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 django 中传递多个可选 URL 参数?

如何在 django 中传递多个可选 URL 参数?

侃侃尔雅 2023-10-11 09:54:51
如何传递多个可选的 URL 参数?例如,我想传递 2 个参数:my_color和my_year,但它们是可选的,因此可能不会传递它们中的任何一个,也可能两者都传递,或者可能只有一个。目前urls.py我有:urlpatterns = [     re_path(r'^products/(?P<my_color>.*)/(?P<my_year>.*)$', some_view), ]这显然是不正确的,只有当它们都通过时才有效。什么是正确的解决方案?PS 当只需要传递一个可选参数时,我找到了答案,但不知道如何对少数参数执行相同的操作。在这种情况下,“多路线选项”似乎也不是解决方案(?)
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

如果是数字myyear序列,并且是非数字序列,则可以使用mycolor


urlpatterns = [

    re_path(r'^products/((?P<my_color>\D+)/)?(?P<my_year>\d+)$', some_view),

]

如果或不存在,这将为相应元素传递一个空字符串。因此,您可以编写一个如下所示的视图:my_colormy_year


def some_view(request, my_color, my_year):

    if my_color:

        # …

    if my_year:

        # …

如果两者具有相同的字符序列,这是不可能的,因为您将如何解释products/bla?是bla颜色还是年份?


话虽这么说,我认为你把事情搞得太复杂了。您可以定义四种模式,例如:


urlpatterns = [

    path(r'^products/', some_view),

    path(r'^products/<int:year>/'),

    path(r'^products/<str:color>/'),

    path(r'^products/<str:color>/<int:year>/', some_view),

]

因此,您在这里为同一视图定义了四个视图。然后视图可以定义可选参数:


def some_view(request, color=None, year=None):

    # …


查看完整回答
反对 回复 2023-10-11
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信