在实现主页前,我们可以先学习一下Django模版 > 2.4 模板继承,通过基础方便模版复用和修改。

视图:

from django.shortcuts import render
 
def home_view(request):
    test_cases = [
        {"id": 1, "name": "测试用例1", "status": "未执行"},
        {"id": 2, "name": "测试用例2", "status": "未执行"},
        {"id": 3, "name": "测试用例3", "status": "未执行"},
        {"id": 4, "name": "测试用例4", "status": "未执行"},
        {"id": 5, "name": "测试用例5", "status": "未执行"},
        {"id": 6, "name": "测试用例6", "status": "未执行"},
        {"id": 7, "name": "测试用例7", "status": "未执行"},
        {"id": 8, "name": "测试用例8", "status": "未执行"},
        {"id": 9, "name": "测试用例9", "status": "未执行"},
        {"id": 10, "name": "测试用例10", "status": "未执行"},
    ] #测试数据
 
    return render(request, 'home.html',{'test_cases': test_cases})
 

主页模版:

header.html 主要显示登录信息

<header>
    <div class="login-info">
        {% if user.is_authenticated %}
            <span>欢迎, <strong>{{ user.username }}</strong></span>
        {% else %}
            <a href="{% url 'login' %}" class="btn">登录</a>
        {% endif %}
    </div>
</header>
 

base.html 主体页面 block留空的标题 和 body

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{% block title %}ULP Test Tool{% endblock %}</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f4f4f4;
        }
        header {
            background-color: #333;
            color: white;
            padding: 15px;
            text-align: right;
        }
        header .login-info {
            display: inline-block;
            margin-right: 20px;
        }
        header .login-info span {
            margin-left: 5px;
        }
        main {
            padding: 20px;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
            background-color: white;
        }
        table th, table td {
            padding: 10px;
            border: 1px solid #ddd;
            text-align: center;
        }
        table th {
            background-color: #f2f2f2;
        }
        .btn {
            padding: 10px 20px;
            font-size: 16px;
            background-color: #4CAF50;
            color: white;
            border: none;
            cursor: pointer;
        }
        .btn:hover {
            background-color: #45a049;
        }
        .loading {
            text-align: center;
            font-size: 20px;
            margin-top: 20px;
        }
    </style>
</head>
<body>
    {% include 'header.html' %}
 
    <main>
        {% block content %}
        {% endblock %}
    </main>
 
  
 
</body>
 
</html>

testtable.html

 
<h2>测试用例列表</h2>
<table id="testCaseTable">
    <thead>
        <tr>
            <th>测试用例ID</th>
            <th>测试名称</th>
            <th>执行状态</th>
        </tr>
    </thead>
    <tbody>
        {% for test_case in test_cases %}
            <tr>
                <td>{{ test_case.id }}</td>
                <td>{{ test_case.name }}</td>
                <td>{{ test_case.status }}</td>
            </tr>
        {% endfor %}
    </tbody>
</table>
<div class="loading" id="loading" style="display:none;">加载中...</div>
<button id="startTestBtn" class="btn">开始测试</button>

home.html

{% extends 'base.html' %}
{% block title %}主页 - 测试用例管理{% endblock %}
{% block content %}
    {% include 'testtable.html' %}
{% endblock %}

路由urls.py配置后,登录即可显示 image.png