You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django ListView中get_context_data致未登录用户无法查看会员定价

Django ListView未登录用户看不到会员定价?问题出在你的get_context_data里!

问题原因

你写的get_context_data函数有个明显的逻辑漏洞:只有当用户已登录时,才会调用super().get_context_data(**kwargs)去获取ListView默认的上下文(包括membership_list数据);而未登录用户进入页面时,这个if条件不成立,你直接返回了一个未初始化的context变量——这时候模板里的membership_list根本不存在,自然显示不出任何定价内容。

当你删掉这个函数后,ListView会使用默认的get_context_data实现,它会正常查询Membership模型并把结果放进上下文,所以未登录用户也能看到列表了。

解决办法

修改get_context_data,先获取基础上下文,再根据登录状态添加额外数据,而不是只在登录时才获取基础上下文。具体代码如下:

class MembershipSelectView(ListView):
    model = Membership
    context_object_name = 'membership_list'
    ordering = ['price']

    def get_context_data(self, *args, **kwargs):
        # 先调用父类方法获取默认上下文(包含membership_list)
        context = super().get_context_data(**kwargs)
        # 再判断用户是否登录,添加额外数据
        if self.request.user.is_authenticated:
            current_membership = get_user_membership(self.request)
            context['current_membership'] = str(current_membership.membership)
        return context

这样不管用户是否登录,context里都会有membership_list数据,未登录用户能正常看到会员定价,登录用户则额外获取current_membership信息,完美解决你的问题。

内容的提问来源于stack exchange,提问作者Dominic M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:04:51