【问题标题】:django tables how to detect if table is emptydjango表如何检测表是否为空
【发布时间】:2017-08-03 10:00:53
【问题描述】:

我是 django 和 Web 开发的新手,基于 SO 上的示例和帮助,我拼凑了一些东西,它采用模型并将其呈现在 django 表中。我的模板代码基本如下:

{% block content %}
{% load static %}
{% load render_table from django_tables2 %}
 <div class="function-page">
     <div class="table-form">
        <div class="function-container">
                {% render_table reviews %}
        </div>
     </div>
 </div>
{% endblock %}

视图如下:

@login_required(login_url="login/")
def review(request):
    table = DummyTable(DummyModel.objects.all())
    form = DummyForm()
    RequestConfig(request, paginate={"per_page": 10}).configure(table)
    return render(request, 'review.html', {'reviews': table, 'DummyForm': form})

这很好用。但是,我想做的是向用户显示一条消息,说当数据库表为空时没有记录。在当前设置中,它显示了一个带有列的空表,从可用性的角度来看,这可能不是最好的。

【问题讨论】:

    标签: django django-templates django-views django-tables2


    【解决方案1】:

    Milano 的回答对我有用,但从 if 条件中删除了“.list”:

    {% if reviews_table.data.list %}
        {% render_table reviews_table %}
    {% else %}
        <h1>There are no reviews yet</h1>
    {% endif %}
    

    【讨论】:

      【解决方案2】:

      针对table.paginated_rows 进行测试,当表没有数据时,它将为空并评估为False

      他们在django_tables2/templates/django_tables2/bootstrap.html:~26 模板中使用它:

      {% for row in table.paginated_rows %}
          ...
      {% empty %}
          ... {{ table.empty_text }}
      {% endfor %}
      

      【讨论】:

        【解决方案3】:

        有两种选择。要么在class Meta 中设置empty_text

        class Reviews(tables.Table):
        
            class Meta:
                empty_text = _("There are no reviews yet")
        

        或者你可以在模板里面检查一下,避免这样渲染表格

        {% if reviews_table.data.list %}
            {% render_table reviews_table %}
        {% else %}
            <h1>There are no reviews yet</h1>
        {% endif %}
        

        【讨论】:

          【解决方案4】:

          可能最简单的方法是在您的模板中。假设您的空变量名为reviews

          {% block content %}
          {% load static %}
          {% if reviews %} 
             {% load render_table from django_tables2 %}
                <div class="function-page">
                   <div class="table-form">
                      <div class="function-container">
                          {% render_table reviews %}
                     </div>
                   </div>
                 </div>
          {% else %} 
          <span> Whatever holding response/error message you want. </span> 
          {% endif %}
          {% endblock %}
          

          根据this answer, for example,对有效但为空的变量使用 {% if variable %},它通常评估为 False,让您使用 {% if reviews %}。

          但是,如果您需要真正的防弹检查,您可以执行{{ value|default:"nothing" }} - 来自here.

          您也可以在视图中执行此操作,并使用 Django 中包含的 standard Messages framework 将错误消息传递回模板:

          from django.contrib import messages
          messages.add_message(request, messages.INFO, "No reviews found, I'm afraid!.")
          

          您需要在模板中包含这样的内容才能使用消息:

          {% if messages %}
          <ul class="messages">
              {% for message in messages %}
              <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
              {% endfor %}
          </ul>
          {% endif %}
          

          或者你可以两者都做! :)

          【讨论】:

          • 根据我对另一个答案的评论,我认为评论表始终是一个有效变量。有没有办法检查是否为空?
          • 对一个有效但为空的变量使用 {% if variable %},它通常评估为 False,ime(请参阅 this answer, for example。但是,如果您需要真正的防弹检查,您可以执行 @987654331 @ - 来自here.
          • 好的,当记录数为 0 并且有效时,我在视图中明确将其设置为 None。
          • 太棒了!我冒着风险,上面代码中未包含的 DummyTable 对象正在生成模板正在读取的 something ,因此不会在该 {% if%} 语句中评估 False 。很高兴你有一些有用的东西。 :)
          • 是的,这可能是因为它是一个可能导致问题的 django-tables 实例;)感谢您的帮助。
          【解决方案5】:

          这样做:

          {% if reviews %}
          <div class="function-page">
              <div class="table-form">
                 <div class="function-container">
                     {% render_table reviews %}
                 </div>
              </div>
          </div>
          
          {% else %}
          <div>
              <p> Message to use </p>
          </div>
          
          {% endif %}
          

          【讨论】:

          • 我认为reviews 表始终是一个有效的变量。有没有办法检查是否为空?
          • 如果为空则不执行if语句。
          猜你喜欢
          • 2013-05-14
          • 1970-01-01
          • 1970-01-01
          • 2017-04-17
          • 2015-01-29
          • 1970-01-01
          • 2021-05-30
          • 1970-01-01
          相关资源
          最近更新 更多