【问题标题】:Django - How to add on to reverse urlresolver properlyDjango - 如何正确添加到反向 urlresolver
【发布时间】:2016-01-24 06:16:36
【问题描述】:

假设我有这个:

from django.core.urlresolvers import reverse
url = reverse('account-list')

假设这会导致 URL:`/account/list/'

如何添加到 URL?我想将该 URL 设为:/account/list/1(在其末尾添加一个 pk 值)。我在这里知道:Including a querystring in a django.core.urlresolvers reverse() call 它解释了如何添加 GET 参数(例如 ?pk=1,但我想知道是否有适当的方法可以添加到 URL(不使用 GET 参数))。

我正在使用 DRF 路由器: router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) 并且用户详细信息视图采用 pk 值。所以我想做 url = reverse('user-list') 并在其末尾附加 /1。

【问题讨论】:

  • 这没有多大意义。您不能只是反向添加随机参数 - 帐户列表 URL 实际上首先需要接受参数。
  • @DanielRoseman 是正确的。没有理由在 Django 中需要手动干预反向 url。但是,最终它只是一个字符串。添加内容,就像添加字符串一样。
  • @DanielRoseman 我正在使用 DRF 路由器:router = routers.DefaultRouter() router.register(r'users', views.UserViewSet)user-detail 视图采用 pk 值。所以我想在url = reverse('user-list') 后面加上/1
  • 不,如果您想获取传递该名称的用户详细信息视图的 URL,加上 pk 来反转,您不要尝试操纵列表 URL。为什么详细 url 仍然包含“列表”?

标签: python django django-urls


【解决方案1】:

如果您对详细视图特别感兴趣,则不应使用account-list。假设您有一个单独的 account-detail 视图(当您使用默认的 ModelViewSets 时,Django Rest Framework 也会为您创建这些视图,就像使用 account-list 一样):

from django.core.urlresolvers import reverse
u = reverse('account-detail', args=[1])

如果我正确理解您的问题,这将是解决此问题的正确方法。

您还可以处理命名的 URL 参数。对于以下带有 slug 参数的 URL 规则:

url(r'/accounts/(?<slug>[a-fA-F0-9]+)/', name='account-detail', ...)

以下是您如何反转帐户的详细视图,slug 等于 something

from django.core.urlresolvers import reverse
u = reverse('account-detail', kwargs={'slug': 'something'})

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 2011-06-21
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2018-01-19
    相关资源
    最近更新 更多