如何在Django视图中正确获取上下文?

0 投票
1 回答
1971 浏览
提问于 2025-04-18 06:22

我有一些小组。用户可以成为这些小组的成员。当用户查看小组的资料时,如果他是这个小组的成员,他应该能看到关于自己的信息。这个功能是这样实现的:

    class UniverseDetailView(LoggedInMixin, DetailView):
        model = Universe
        template_name = 'multiuniverse/universe_detail.html'
    
        def get_context_data(self, **kwargs):
            context = super(UniverseDetailView, self).get_context_data(**kwargs)
            member = Member.objects.get(user=self.request.user, uni=self.object)
            context['member'] = member
            return context

但是,如果他不是这个小组的成员,就必须显示这个错误信息:

    Exception Type: DoesNotExist
    Exception Value: Member matching query does not exist.

有没有办法在不使用 get_or_create 的情况下获取这个上下文?

1 个回答

0

来自Django文档关于get()的说明

get()方法如果找不到符合条件的对象,就会抛出一个DoesNotExist的异常。这种异常也是模型类的一个属性。

为了防止这个错误导致你的代码停止运行,你可以把它放在一个try/except块里:

try:
    context['member'] = Member.objects.get(user=self.request.user, uni=self.object)
except Member.DoesNotExist:
    context['member'] = None

另请参见:从数据库获取一个对象,如果没有匹配的则返回None

撰写回答