我有一个html页面,我想只在传入的表对象不为空时显示搜索栏。但我的支票不正常。代码如下:
<!-- We'll display the search bar only when the user has access to at least one item, otherwise, hide it. -->
{% if item_info %}
Number of entries: {{ item_info|length }}, nothing? {{item_info}}
<section>
<form method="post" action=".">
{% csrf_token %}
<input type="text" class="search-query span80" id="search" name="search" placeholder="Enter ItemNo to search">
<button type="submit" class="btn">Search</button>
</form>
</section>
{% else %}
No item_info.
{% endif%}
以下是我在浏览器上看到的:
项目信息为空,我想应该去其他分行,但是,如果分行输入,任何帮助都非常感谢!
在elethan回答后编辑:
我已经打印出来调试了,这是截图:
所以,看起来这个项目信息真的是空的,我没有看到任何项目信息对象被打印出来。
另外,为了帮助调试,下面是我的视图代码:
def item_info(request):
iteminfo= ItemInfo.objects.all().filter(Q(some_query)
table = ItemInfoTable(iteminfo)
RequestConfig(request).configure(table)
return render(request, 'item_info.html', {'item_info':table,})
下面是我的表定义:
import django_tables2 as tables
class ItemInfoTable(tables.Table):
itmno = tables.Column(verbose_name="Item #")
class Meta:
model = ItemInfo
empty_text = "There is no item record."
下面是它引用的ItemInfo表:
class ItemInfo(models.Model):
itmno = models.CharField(primary_key=True, max_length=11L, db_column='ItmNo', blank=True)
class Meta:
db_table = 'item_info'
最佳答案
如果item_info
是RawQuerySet
,请尝试{% if item_info.all %}
而不是{% if item_info %}
。RawQuerySet
没有定义__bool__()
方法,因此始终将实例视为True
。请参阅this section文档中的警告,下面重复,以防将来此链接失效:
而RawQuerySet实例可以像普通的
QuerySet,RawQuerySet没有实现所有可以与一起使用的方法
奎丽斯特。例如,bool()和len()在
RawQuerySet,因此所有RawQuerySet实例都被认为是真的。
这些方法没有在RawQuerySet中实现的原因是
在没有内部缓存的情况下实现它们将是一种性能
缺点和添加这样的缓存将是向后不兼容的。