在 Django 中使用 if else 条件和 for 循环

问题描述 投票:0回答:1

我对 Django 相当陌生,我有一个表中显示的用例模型列表,以及一个包含用例外键的用例进度模型。

最初一个新的用例还没有进度,所以在我的模板中我试图说检查用例是否没有进度但设置默认值以便进度列不是空的并且看起来很奇怪。

我的逻辑好像写不出来。我希望我清楚。

我的模板:

{% extends 'EmpDashboard.html' %}
{% block body %}

<div class="row d-flex">
    <div class="col-12 mb-4">
        <div class="card border-light shadow-sm components-section d-flex">
            <div class="card-body d-flex row col-12">
                <div class="row mb-4">
                    <div class="col-lg-12 col-sm-16">
                        <h3 class="h3 mb-4">View Usecases:</h3>
                    </div>
                    {% if usecase_details is not none and usecase_details %}
                    <div class="table-responsive">
                        <table id="example" class="table table-flush text-wrap table-sm" cellspacing="0" width="100%">
                            <thead class="thead-light">
                                <tr>
                                    <th scope="col">No.</th>
                                    <th scope="col">Usecase ID</th>
                                    <th scope="col">Usecase Name</th>
                                    <th scope="col">Client</th>
                                    <th scope="col">KPI</th>
                                    <th scope="col">Progress</th>
                                    <th scope="col">Progress date</th>
                                    <th scope="col">Pipeline</th>
                                    <th scope="col">Phase</th>
                                    <!-- <th scope="col">Estimated Delivery</th> -->
                                    <th scope="col">Details</th>
                                </tr>
                            </thead>
                            <tbody>
                                {% for result in usecase_details %}
                                <tr>
                                    <td>{{ forloop.counter }}</td>
                                    <td><span class="badge bg-info">{{result.usecase_id}}</span></td>
                                    <td>{{result.usecase_name}}</td>
                                    <td>{{result.business_owner.business_owner_name}}</td>
                                    <td>{{result.kpi.kpi_name}}</td>
                                    {% if result.usecaseids.all is not none and result.usecaseids.all %}
                                    {% for progress in result.usecaseids.all %}
                                    {% if forloop.last %}
                                    <td><div class="progress-wrapper">
                                        <div class="progress-info">
                                        <div class="progress-percentage">
                                        <span>{{progress.usecase_progress_value}}%</span>
                                        </div>
                                        </div>
                                        <div class="progress">
                                        <div class="progress-bar bg-success" role="progressbar" style="width: 60%;" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100"></div>
                                        </div>
                                        </div>
                                    </td>
                                    <td>{{progress.usecase_progress_date}}</td>
                                    <td>{{progress.pipeline.pipeline_name}}</td>
                                    <td>{{progress.phase.phase_name}}</td>
                                    {% endif %}
                                    {% endfor %}
                                    {% else %}
                                    <tr>
                                        <td>{{ forloop.counter }}</td>
                                        <td><span class="badge bg-info">{{result.usecase_id}}</span></td>
                                        <td>{{result.usecase_name}}</td>
                                        <td>{{result.business_owner.business_owner_name}}</td>
                                        <td>{{result.kpi.kpi_name}}</td>
                                        {% for progress in result.usecaseids.all %}
                                        <td><div class="progress-wrapper">
                                            <div class="progress-info">
                                            <div class="progress-percentage">
                                            <span>0%</span>
                                            </div>
                                            </div>
                                            <div class="progress">
                                            <div class="progress-bar bg-success" role="progressbar" style="width: 60%;" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100"></div>
                                            </div>
                                            </div>
                                        </td>
                                        <td>NEW</td>
                                        <td>NEW</td>
                                        <td>NEW</td>
                                        <!-- <td>{{progress.estimated_date_delivery}}</td> -->
                                        {% endfor %}
                                    </tr>
                                    {% endif %}
                                    <td>
                                        <a href="/view-usecase/{{result.usecase_id}}" class="btn btn-success">VIEW</a>
                                    </td>
                                </tr>
                                {% endfor %}
                            </tbody>
                        </table>
                    </div>
                    {% else %}
                    <div class="col-lg-12 col-sm-16">
                      
                        <h3 class="h3 text-center">
                            No Records Found!
                        </h3>
                    </div>
                    {% endif %}
                </div>
            </div>
        </div>
    </div>
</div>  


<script>
$(document).ready(function () {
  $('#example').DataTable();
  $('.dataTables_length').addClass('bs-select');
  $('#example td').css('white-space','initial');
});
</script>
{% endblock %}
python django django-views django-forms django-templates
1个回答
1
投票

您可以使用if语句检查

result
对象是否有相关的
usecase_progress
对象,如果不存在则设置默认值,如下所示:

{% for result in usecase_details %}
<tr>
    <td>{{ forloop.counter }}</td>
    <td><span class="badge bg-info">{{result.usecase_id}}</span></td>
    <td>{{result.usecase_name}}</td>
    <td>{{result.business_owner.business_owner_name}}</td>
    <td>{{result.kpi.kpi_name}}</td>
    {% if result.usecaseids.all %}
        {% for progress in result.usecaseids.all %}
            {% if forloop.last %}
                <td>
                    <div class="progress-wrapper">
                        <div class="progress-info">
                            <div class="progress-percentage">
                                <span>{{progress.usecase_progress_value}}%</span>
                            </div>
                        </div>
                        <div class="progress">
                            <div class="progress-bar bg-success" role="progressbar" style="width: {{progress.usecase_progress_value}}%;" aria-valuenow="{{progress.usecase_progress_value}}" aria-valuemin="0" aria-valuemax="100"></div>
                        </div>
                    </div>
                </td>
                <td>{{progress.usecase_progress_date}}</td>
                <td>{{progress.pipeline.pipeline_name}}</td>
                <td>{{progress.phase.phase_name}}</td>
            {% endif %}
        {% endfor %}
    {% else %}
        <td>
            <div class="progress-wrapper">
                <div class="progress-info">
                    <div class="progress-percentage">
                        <span>0%</span>
                    </div>
                </div>
                <div class="progress">
                    <div class="progress-bar bg-success" role="progressbar" style="width: 0%;" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
                </div>
            </div>
        </td>
        <td>NEW</td>
        <td>NEW</td>
        <td>NEW</td>
    {% endif %}
    <td>
        <a href="/view-usecase/{{result.usecase_id}}" class="btn btn-success">VIEW</a>
    </td>
</tr>
{% endfor %}
© www.soinside.com 2019 - 2024. All rights reserved.