Get_context_data打破Django ListView

时间:2019-01-30 15:36:34

标签: django django-queryset

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

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

以某种方式,get_context_data破坏了我的非身份验证用户的model = membership查询。

有什么主意吗?

membership_list.html

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

views.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

1 个答案:

答案 0 :(得分:2)

我认为这是因为您没有为未经身份验证的用户返回context。如果用户未通过身份验证,则传递到模板的上下文将为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