使 URL 接受参数作为可选参数。非捕获

Posted

技术标签:

【中文标题】使 URL 接受参数作为可选参数。非捕获【英文标题】:Making URL to accept parameters as optional. Non Capturing 【发布时间】:2019-12-20 01:37:19 【问题描述】:

我想让我的网址仅在给定时才接受可选参数。我无法将参数设为可选/非捕获。


re_path(r'^users/(?:(?P<sort_by>\d+)/)?$', views.UserListView.as_view(), name='user_list'),

我希望此 url 仅在提供给视图时接受 slug 字段。我怎样才能做到这一点? 显示错误

Reverse for 'user_list' with keyword arguments ''sort_by': 'username'' not found. 1 pattern(s) tried: ['admin/users/(?:(?P<sort_by>\\d+)/)?$']

当我通过 sort_by='username'

【问题讨论】:

见Django optional url parameters 看过了。无法理解。你能帮忙吗? 好的,试试r'^users/(?P&lt;slug&gt;[^/]*)'r'^users(?:/(?P&lt;slug&gt;[^/]+))? 我只想要 [a-z] 和 _ 在我的网址中。比如 sort_by=is_superuser 那么,r'^users(?:/(?P&lt;slug&gt;[a-z_]+))?? 【参考方案1】:

我会创建 2 个网址:

path('users/<str:sort_by>', views.UserListView.as_view(), name='user_list_by_user'),
path('users', views.UserListView.as_view(), 'sort_by': 'default_sort_you_use', name='user_list'),

然后您可以调用适当的 URL,并且视图中始终有一个 sort_by 值。

【讨论】:

谢谢你。我用的是蛞蝓。如果我通过 会有所不同吗? 当然,你可以使用 【参考方案2】:

你可以保留你的网址:

re_path(r'^users/$', views.UserListView.as_view(), name='user_list'),

然后在你的模板中使用

   <a href="% url 'user_list' %?sort_by=username">Sort</a>

【讨论】:

非常感谢。有效。你能告诉我如何使用它对数据进行排序吗?它看起来很乱,但它正在工作。

以上是关于使 URL 接受参数作为可选参数。非捕获的主要内容,如果未能解决你的问题,请参考以下文章

接受可选参数的Shell脚本[重复]

Powershell 非位置,可选参数

django - 可选 url 参数的正则表达式

捕获单词 a 或 b 以及可选的额外参数的一部分

如何转发可选参数

scala:作为其他参数的函数的可选默认参数