我有一个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%}

以下是我在浏览器上看到的:
python - 检查Django空表对象不起作用-LMLPHP
项目信息为空,我想应该去其他分行,但是,如果分行输入,任何帮助都非常感谢!
在elethan回答后编辑:
我已经打印出来调试了,这是截图:
python - 检查Django空表对象不起作用-LMLPHP
所以,看起来这个项目信息真的是空的,我没有看到任何项目信息对象被打印出来。
另外,为了帮助调试,下面是我的视图代码:
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_infoRawQuerySet,请尝试{% if item_info.all %}而不是{% if item_info %}RawQuerySet没有定义__bool__()方法,因此始终将实例视为True。请参阅this section文档中的警告,下面重复,以防将来此链接失效:
而RawQuerySet实例可以像普通的
QuerySet,RawQuerySet没有实现所有可以与一起使用的方法
奎丽斯特。例如,bool()和len()在
RawQuerySet,因此所有RawQuerySet实例都被认为是真的。
这些方法没有在RawQuerySet中实现的原因是
在没有内部缓存的情况下实现它们将是一种性能
缺点和添加这样的缓存将是向后不兼容的。

10-04 18:16