使 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<slug>[^/]*)'
或r'^users(?:/(?P<slug>[^/]+))?
我只想要 [a-z] 和 _ 在我的网址中。比如 sort_by=is_superuser
那么,r'^users(?:/(?P<slug>[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
值。
【讨论】:
谢谢你。我用的是蛞蝓。如果我通过你可以保留你的网址:
re_path(r'^users/$', views.UserListView.as_view(), name='user_list'),
然后在你的模板中使用
<a href="% url 'user_list' %?sort_by=username">Sort</a>
【讨论】:
非常感谢。有效。你能告诉我如何使用它对数据进行排序吗?它看起来很乱,但它正在工作。以上是关于使 URL 接受参数作为可选参数。非捕获的主要内容,如果未能解决你的问题,请参考以下文章