首页 > 解决方案 > get_context_data 破破 django listview

问题描述

我有一个显示会员定价的列表视图,但是当用户未登录时,会员对象不会显示,因此没有定价。当我登录时它确实有效。

但是,当我从views.py 中完全删除def get_context_data 函数时,它会起作用,并且成员资格列表对象会出现在未经过身份验证的用户身上。

因此,不知何故,get_context_data 打破了我对未经过身份验证的用户的 model=membership 查询。

任何的想法?

会员列表.html

{% for object in membership_list %}
          <td><span>${{ object.price }}</span><span class="text-muted">/mo</span></td>
{% endfor %}

视图.py

class MembershipSelectView(ListView):
    model = Membership
    context_object_name = 'membership_list'
    ordering = ['price']
    #Check if user is logged in first

    def get_context_data(self, *args, **kwargs):
        if self.request.user.is_authenticated:
            context = super().get_context_data(**kwargs)
            current_membership = get_user_membership(self.request)
            context['current_membership'] = str(current_membership.membership)
            return context

标签: djangodjango-queryset

解决方案


我认为这是因为您没有context为未经身份验证的用户返回 a 。如果用户未通过身份验证,则传递给模板的上下文可能会与父类None的方法混淆。ListView我必须查看具体的错误消息才能确定,但​​除非代码比发布的更多,否则这似乎是罪魁祸首。

将调用放在super外面的方法if self.request.user.is_authenticated,也把return context外面的。

class MembershipSelectView(ListView):
    model = Membership
    context_object_name = 'membership_list'
    ordering = ['price']
    #Check if user is logged in first

    def get_context_data(self, *args, **kwargs):
        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

推荐阅读