django tables 如何检测 table 是否为空
django tables how to detect if table is empty
我是 django 和 web 开发的新手,基于 SO 上的示例和帮助,我拼凑了一些采用模型并将其呈现在 django-table 中的东西。我的模板代码基本如下:
{% 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})
这很好用。但是,我想做的是向用户显示一条消息,说明当数据库 table 为空时没有记录。在当前设置中,它显示一个空 table,其中的列从可用性的角度来看可能不是最好的。
这样做:
{% 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
:
{% 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 %}
或者你可以两者都做! :)
有两种选择。要么在 class Meta
中设置 empty_text
class Reviews(tables.Table):
class Meta:
empty_text = _("There are no reviews yet")
或者您可以在模板中检查它并避免以这种方式呈现table
{% if reviews_table.data.list %}
{% render_table reviews_table %}
{% else %}
<h1>There are no reviews yet</h1>
{% endif %}
针对 table.paginated_rows
进行测试,当 table 没有数据时,它将为空并评估为 False
。
他们在 django_tables2/templates/django_tables2/bootstrap.html:~26
模板中使用了这个:
{% for row in table.paginated_rows %}
...
{% empty %}
... {{ table.empty_text }}
{% endfor %}
Milano 回答对我有用,但从 if 条件中删除“.list”:
{% if reviews_table.data.list %}
{% render_table reviews_table %}
{% else %}
<h1>There are no reviews yet</h1>
{% endif %}
我是 django 和 web 开发的新手,基于 SO 上的示例和帮助,我拼凑了一些采用模型并将其呈现在 django-table 中的东西。我的模板代码基本如下:
{% 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})
这很好用。但是,我想做的是向用户显示一条消息,说明当数据库 table 为空时没有记录。在当前设置中,它显示一个空 table,其中的列从可用性的角度来看可能不是最好的。
这样做:
{% 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
:
{% 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 %}
或者你可以两者都做! :)
有两种选择。要么在 class Meta
empty_text
class Reviews(tables.Table):
class Meta:
empty_text = _("There are no reviews yet")
或者您可以在模板中检查它并避免以这种方式呈现table
{% if reviews_table.data.list %}
{% render_table reviews_table %}
{% else %}
<h1>There are no reviews yet</h1>
{% endif %}
针对 table.paginated_rows
进行测试,当 table 没有数据时,它将为空并评估为 False
。
他们在 django_tables2/templates/django_tables2/bootstrap.html:~26
模板中使用了这个:
{% for row in table.paginated_rows %}
...
{% empty %}
... {{ table.empty_text }}
{% endfor %}
Milano 回答对我有用,但从 if 条件中删除“.list”:
{% if reviews_table.data.list %}
{% render_table reviews_table %}
{% else %}
<h1>There are no reviews yet</h1>
{% endif %}