django - 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
解决方案
我认为这是因为您没有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
推荐阅读
- google-sheets - IFTTT webhook 到谷歌表格
- excel - 在从所述特定文件生成的文件中使用特定 Excel 文件中的模块
- python - Pandas Python - 将列表列转换为多列
- android - 在 MainActivity 中动态改变布局
- python - 使用 scipy.signal.spectrogram 时出现错误的频谱图
- python - 如何在 django rest 框架中访问通用 API 视图(更具体地说是 ListCreateAPIView)中的 url kwargs?
- angular - url在tomcat 8服务器上重写Angular 4
- c# - 反序列化不正确的 json 字符串
- javascript - 将数组编码为一行
- sas - 如何有效地格式化SAS中多列的数据