django 表如何检测表是否为空

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

我是 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})

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

最佳答案

可能最简单的方法是在您的模板中。假设您的空变量称为 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 review %}。

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

您也可以在 View 中执行此操作,并使用 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 %}

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

关于django 表如何检测表是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42762754/

相关文章:

django - 提高forms.ValidationError不能在自定义模板形式下工作

django - 如何在 Django View 中获取选择选项值

python - "Confirm Form Resubmission "在我的 django 项目的 chrome 浏览器中按下

python - 变量作为字段选项中的参数

python - django中如何赋值

python - 如何在 Django 1.8 中多次保存同一个表单?

python - Django 找不到任何 View ,但索引

django - 在 django 管理面板中隐藏应用程序

Django extra javascript 在子页面中不起作用

python - Django-Models:TypeError:强制转换为 Unicode:需要字符串或缓冲区,用户发现