Jinja2 - 如果condition为true,则显示特定html表行中的删除按钮

时间:2017-08-16 11:51:42

标签: python html django jinja2

我尝试使用jinja2创建if else条件,其中只有状态为pending_approvalscheduled的表格行会在其旁边显示删除按钮。但是我很难搞清楚,因为表中的所有数据都显示在for loop中,所以如果条件为真且所有行都有删除按钮,反之亦然。

非常感谢任何帮助

以下是我的代码:

model.py

class Leave(models.Model):
    employee = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='+')
    type = models.ForeignKey(LeavesType, on_delete=models.CASCADE, related_name='+')
    status = (('cancelled', 'Cancelled'),
              ('taken', 'Taken'),
              ('pending_approval', 'Pending Approval'),
              ('scheduled', 'Scheduled'),
              ('weekend', 'Week End'),
              ('public_holiday', 'Public holiday'),
              )
    status = models.CharField(max_length=50, choices=status, default='pending_approval')

view.py

def my_leaves_view(request):
     leaves_log = Leave.objects.all().filter(employee=request.user.profile.employee.id)
     context = {'leaves_log': leaves_log}
     return render(request, 'hrm/employee/details/my_leaves.html', context)

HTML

<table id="Log" class="display table table-hover table-responsive leaves-table">
<thead>
    <tr>
        <th class="small text-muted text-uppercase"><strong>Leave Type</strong></th>
        <th class="small text-muted text-uppercase"><strong>Status</strong></th>
        <th class="small text-muted text-uppercase"><strong></strong></th>
    </tr>
</thead>
<tbody>
{% for field in leaves_log %}
    <tr>
        <td>{{field.type}}</td>
        <td><img class="media-object img-circle status-icon-size" src="/media/dashboard/ui/file_status/{{field.status}}.png" style="display: inline-block; height: 24px; margin-right: 10px;">{{field.status}}</td>
        <td><div class="btn-group">
            {% if field.status == 'pending_approval' or 'scheduled'%}
                <button type="button" class="btn btn-default btn-xs dropdown-toggle active" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                    Action <span class="caret"></span>
                </button>
                <ul class="dropdown-menu dropdown-menu-right">
                    <li onclick="delete_leaves();">
                        <a href="/hrm/employee/{{field.id}}/delete/" onclick="return confirm('Are you sure you want to delete this item?');">
                            <i class="fa fa-fw fa-trash text-gray-lighter m-r-1"></i>Withdraw
                        </a>
                    </li>
                </ul>
            </div>
        </td>
        {% else %}
        <td></td>
        {% endif %}
    </tr>
</tbody>

1 个答案:

答案 0 :(得分:2)

您没有正确使用or运算符。它用于分隔两个布尔值,因此您可以想象

{% if field.status == 'pending_approval' or 'scheduled' %}

被解释为

{% if bool(field.status == 'pending_approval') or bool('scheduled') %}

bool('any non-empty string')始终为True

正确的语法是

{% if field.status == 'pending_approval' or field.status == 'scheduled' %}

{% if field.status in ['pending_approval', 'scheduled'] %}