如何将 Django 的 DetailView(或某些内置视图 class)用于主页?

How to use Django's DetailView (or some built-in view class) for a home page?

我正在用 Django 构建一个应用程序,我想为经过身份验证的用户设置一个主页。

我认为最好为此使用内置 generic.DetailView,因为我想在页面中显示的详细信息是已识别用户的详细信息。问题是,这个 class 需要通过 URL 接收目标实体的 id 作为十进制 pk 参数。但是,有关实体的信息在 request.user 中,我想避免重复该信息,以免在 url 中显示我的用户 ID。

我想在 get_object 方法中获取 request 就可以解决问题,但它不需要参数。

这可能吗?这是一个好主意吗?有没有我可能遗漏的替代品?

DetailView只需要pkslug来获取对象。如果您覆盖 get_object 则不需要。在get_object方法中,可以通过self.request.user.

访问用户

最后,如果您的视图使用登录用户,那么您可以使用 LoginRequiredMixin 来确保只有登录用户才能访问该视图。

from django.contrib.auth.mixins import LoginRequiredMixin

class MyDetailView(LoginRequiredMixin, DetailView):
    ...
    def get_object(self):
        return self.request.user