Skip to main content
 首页 » 编程设计

python之如何检查 django_tables2 对象为空/null

2024年08月22日28落叶无声

我要解决的问题:
仅当表 my_table 不为空时显示搜索栏,否则隐藏它。

这是我的views.py:

def my_table(request): 
    model1 = Model1.objects.all().filter(Q(some_query)) 
    table = MyTable(model1) 
    RequestConfig(request).configure(table) 
    if not table: 
        print "table is empty" 
        table = None 
    else: 
        print "table is not empty." 
    return render(request, 'my_table.html', {'my_table':table,}) 

这是我的 my_table.html:

{% load render_table from django_tables2 %} 
{% if my_table  %} 
Number of entries: {{ my_table|length }}. 
<section> 
    <form method="post" action="."> 
      {% csrf_token %} 
      <input type="text" class="search-query span80" id="search" name="search" placeholder="Type to search"> 
      <button type="submit" class="btn">Search</button>  
    </form> 
</section> 
{% else %} 
<!-- There's no my_table. --> 
{% endif%} 
 
{% render_table my_table %} 

但是,my_table(request) views.py 中的这个表对象实际上什么也没有,它也没有在 html 中呈现任何内容,但它不是空的,并且显示了搜索栏。
请指教。我哪里做错了?

为了回应评论,这里是 MyTable 代码:

class MyTable(tables.Table): 
    entry1 = tables.Column(verbose_name="Entry 1") 
    entry2 = tables.Column(verbose_name="Entry 2") 
    class Meta: 
        model = MyModel 
        empty_text = "There is no entry record." 
        order_by = "entry1" 
        orderable = True 
        sequence = ('entry1', 'entry2') 
        fields = ('entry1', 'entry2') 
        attrs = {"class": "paleblue", "style": "width:380px"} 

这是 MyModel 的代码:

class MyModel(models.Model): 
    entry1 = models.CharField(primary_key=True, max_length=11L, db_column='Entry1', blank=True) # Field name made lowercase. 
    entry2 = models.CharField(max_length=11L, db_column='Entry2', blank=True) # Field name made lowercase. 
class Meta: 
    db_table = 'my_table' 

请您参考如下方法:

在你的 views.py 中你可以使用:

if table.data.data.__len__ > 0: 

在您的模板中,您可以使用:

{% if table.data|length > 0 %} 
do whatever you want here... 
{% endif %}