31

我正在尝试制作一个用于列出django_tables对象的通用表。我已经让一切正常,除了get_absolute_urls()我的User对象返回:

/users/<username>/

虽然我可以创建此 URL,但它与站点布局的其余部分不匹配,因此我正在寻找另一种方法来执行此操作。有没有办法在不破坏内置身份验证和其他功能的情况下覆盖这个值?

4

2 回答 2

47

您可以使用设置在 settings.py 文件中执行此操作ABSOLUTE_URL_OVERRIDES

ABSOLUTE_URL_OVERRIDES = {
    'auth.user': lambda u: "/users/%s/" % u.username,
}

这是官方文档的链接:https ://docs.djangoproject.com/en/stable/ref/settings/

于 2010-02-24T19:29:23.703 回答
0

作为旁注:

由于 django v1.7django.contrib.auth.models.AbstractUser不再定义get_absolute_url()方法(请参阅发行说明)。

因此 django > v1.7 将不存在 OP 的问题,因为您无论如何都需要定义您的自定义get_absolute_url()方法。

现在有两种方法可以做到这一点:

  1. get_absolute_url()在您的用户模型扩展中定义一个方法。
  2. 使用Mark Lavin 的答案中的解决方案来创建(而不是覆盖)User.get_absolute_url()整个ABSOLUTE_URL_OVERRIDES设置。
于 2019-08-28T18:12:49.243 回答