我有一个显示会员价格的列表视图,但是当用户未登录时,会员对象不会显示,因此没有价格。登录后确实可以使用。
但是,当我从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
答案 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