【问题标题】:How to raise error message if data does not exist in django table如果 django 表中不存在数据,如何引发错误消息
【发布时间】:2019-12-02 08:48:22
【问题描述】:

我的表和过滤器都已设置好并正常工作,但我希望添加一个错误功能,这样当我查询数据库中存在的数据时,它应该正常显示结果,但是,当我输入一个不存在的 qs 时,它应该在表格上显示一条消息,上面写着“记录不存在”而不是空白表格。

这是我的看法:

from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.shortcuts import render
from django_tables2 import RequestConfig
from django_tables2.export import TableExport

from .models import Employee
from .models import EmployeeFilter
from .tables import EmployeeTable


@login_required()
def employees(request):
    filter = EmployeeFilter(request.GET, queryset=Employee.objects.all())
    table = EmployeeTable(filter.qs)
    RequestConfig(request).configure(table)
    count = Employee.objects.all().count()
    male_count = Employee.objects.filter(gender__contains='Male').count()
    female_count = Employee.objects.filter(gender__contains='Female').count()
    user_count = User.objects.all().count()

    export_format = request.GET.get("_export", None)

    if TableExport.is_valid_format(export_format):
        exporter = TableExport(export_format, table)
        return exporter.response("table.{}".format("csv", "xlsx"))

    return render(request, "employees/employees.html", {
        "table": table,
        "filter": filter,
        "count": count,
        "male_count": male_count,
        "female_count": female_count,
        "user_count": user_count,
    })

表单模板:

<!--filter form-->
                            <form action="" class="form form-inline employee-filter-form" method="get">
                                <legend class="mb-2">Filter employee records</legend>
                                <div class="fieldWrapper"> 
                                    {{ filter.form.first_name }}
                                </div>
                                <div class="fieldWrapper">
                                    {{ filter.form.last_name }}
                                </div>
                                <button aria-expanded="false" aria-haspopup="true"
                                        class="ml-2 btn btn-danger filter-btn" type="submit">
                                    Filter
                                </button>
                            </form>

【问题讨论】:

    标签: django django-models django-tables2 django-errors


    【解决方案1】:

    您可以在模板中处理它。只需检查您传递的查询集是否为空:

    {% if queryset %}
        {% for i in queryset %}
            {{ i.text }}  
        {% endfor  %}
    {% else %}
        Error: Queryset is empty! 
    {% endif %}
    

    正如丹尼尔上面提到的,你也可以不使用if,但使用empty

    {% for i in queryset %}
        {{ i.text }}  
    {% empty %}
        Error: Queryset is empty! 
    {% endfor  %}
    

    【讨论】:

    • 更好的是,for 有一个 {% empty %} 子句,因此您不需要 if
    • 谢谢大家的回复。 @Sergey,我似乎不知道将那行代码放在模板中的哪个位置。所以,我已经编辑了我的初始问题以包含表单模板。
    猜你喜欢
    • 2016-08-22
    • 2015-09-02
    • 2017-10-10
    • 2019-06-25
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多