覆盖User对象上的默认get_absolute_url?

时间:2010-02-24 19:11:26

标签: django django-urls django-authentication

我正在尝试为列出django_tables个对象创建一个通用表。除了我的get_absolute_urls()个对象上的User返回时,我已经完成了所有工作:

/users/<username>/

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

2 个答案:

答案 0 :(得分:43)

您可以使用设置ABSOLUTE_URL_OVERRIDES

在settings.py文件中执行此操作
ABSOLUTE_URL_OVERRIDES = {
    'auth.user': lambda u: "/users/%s/" % u.username,
}

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

答案 1 :(得分:0)

作为旁注:

自django v1.7起,django.contrib.auth.models.AbstractUser不再定义get_absolute_url()方法(请参见release notes)。

因此django> v1.7不会存在OP的问题,因为您始终需要定义自定义get_absolute_url()方法。

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

  1. 在用户模型扩展中定义一个get_absolute_url()方法。
  2. 使用Mark Lavin's answer中的解决方案通过ABSOLUTE_URL_OVERRIDES设置创建(而不覆盖)User.get_absolute_url()