这是我的models.py:
class Sherlock(models.Model):
owner = models.ForeignKey(Owner)
wifi = models.BooleanField('Wifi', default=False)
这是我的views.py,其中不仅包含一个上下文:
class OwnerDetails(generic.DetailView):
template_name ='owners/venuedetails.html'
model = Owner
def get_context_data(self, **kwargs):
context = super(OwnerDetails, self).get_context_data(**kwargs)
self.pk = Owner.objects.get(pk=self.kwargs['pk'])
featurete_list = FeatureteImage.objects.filter(owner=self.pk)
context['featurete_list'] = featurete_list
sherlock = Sherlock.objects.filter(owner=self.pk)
context['sherlock'] = sherlock
return context
这是我的模板:
{% if sherlock.wifi %}
<p>Wifi</p>
{% else %}
<p><s>Wifi</s></p>
{% endif %}
当我去/ admin我有wifi检查。但我总是得到一个交叉的wifi(模板中的<s>
标签创建了交叉的wifi)
我的问题是,即使在我的管理员中我检查并保存了wifi字段,它仍然会向模板返回false。
答案 0 :(得分:2)
视图和模板中的这些行不匹配。
sherlock = Sherlock.objects.filter(owner=self.pk)
{% if sherlock.wifi %}
您无法访问查询集上的wifi
属性,您可以在实例上访问它。
如果查询集可能包含多个项目,则可以遍历模板中的实例。
{% for s in sherlock %}
{% if s.wifi %}
Wifi
{% endif %}
{% endfor %}
如果查询集只返回单个实例,那么您可以使用get()
代替filter()
。
sherlock = Sherlock.objects.get(owner=self.pk)
您可以对此进行改进以处理对象不存在的情况
try:
sherlock = Sherlock.objects.get(owner=self.pk)
except Sherlock.DoesNotExist:
# do something here
有时,get_object_or_404
快捷方式对此非常有用。
sherlock = get_object_or_404(Sherlock, owner=self.pk)
最后,请注意,无需在模板中与True进行比较,只需使用
即可{% if sherlock.wifi %}