覆盖 User 对象上的默认 get_absolute_url?

发布于 2024-08-22 14:45:45 字数 331 浏览 8 评论 0原文

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

/users/<username>/

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

I'm trying to make a generic table for listing django_tables objects. I've got everything working, except that the get_absolute_urls() on my User objects returns:

/users/<username>/

While I could create this URL, it doesn't match with the rest of the site layout, so I'm looking for another way to do this. Is there a way to override this value without breaking the built in authentication and other functionality?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

羁客 2024-08-29 14:45:45

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

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

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

You can do this in your settings.py file using the setting ABSOLUTE_URL_OVERRIDES

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

Here's a link to the official docs: https://docs.djangoproject.com/en/stable/ref/settings/

等你爱我 2024-08-29 14:45:45

附注:

自 django v1.7 起,django.contrib.auth.models.AbstractUser 不再定义 get_absolute_url() 方法(参见发行说明)。

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

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

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

As a side note:

Since django v1.7 the django.contrib.auth.models.AbstractUser no longer defines a get_absolute_url() method (see release notes).

So the OP's problem will not exist with django > v1.7 as you anyways need to define your custom get_absolute_url() method.

Now there are two way to do this:

  1. Define a get_absolute_url() method in your User model extension.
  2. Use the solution from Mark Lavin's answer to create (not overwrite) the User.get_absolute_url() through the ABSOLUTE_URL_OVERRIDES setting.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文