【问题标题】:Making URL to accept parameters as optional. Non Capturing使 URL 接受参数作为可选参数。非捕获
【发布时间】: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'

【问题讨论】:

  • 看过了。无法理解。你能帮忙吗?
  • 好的,试试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_]+))??

标签: python regex django django-views django-urls


【解决方案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>

【讨论】:

  • 非常感谢。有效。你能告诉我如何使用它对数据进行排序吗?它看起来很乱,但它正在工作。
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 2019-01-27
  • 2020-10-04
  • 1970-01-01
相关资源
最近更新 更多