You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何实现HTML表格随用户输入动态更新内容并新增行

Django多hostname查询动态表格实现方案

一、调整views.py逻辑

核心改动点:

  • 用session持久化存储所有查询结果,实现每次查询累加新行
  • 支持多hostname批量输入(支持逗号、空格作为分隔符)
  • 新增异常捕获,避免无效域名解析报错
from django.shortcuts import render
import dns
import dns.resolver
import socket
import sys

def index(request):
    # 初始化查询结果列表
    if 'result_list' not in request.session:
        request.session['result_list'] = []
    
    if request.method == 'POST':
        search = request.POST.get('search', '').strip()
        if search:
            # 支持多域名分割:空格、逗号都可以作为分隔符
            host_list = [h.strip() for h in search.replace(' ', ',').split(',') if h.strip()]
            ip_resolver = dns.resolver.Resolver()
            
            for hostname in host_list:
                try:
                    ipv4 = ip_resolver.resolve(hostname, 'A').rrset[0].to_text()
                    ipv6 = ip_resolver.resolve(hostname, 'AAAA').rrset[0].to_text()
                    # 新结果追加到列表
                    request.session['result_list'].append({
                        'hostname': hostname,
                        'ipv4': ipv4,
                        'ipv6': ipv6,
                        'port1': '' # 端口逻辑可自行补充
                    })
                    # 标记session修改,确保存储生效
                    request.session.modified = True
                except Exception as e:
                    # 解析失败的域名可自行增加错误提示逻辑,此处直接跳过
                    pass
    
    return render(request, 'index.html', {"result_list": request.session['result_list']})

如果需要每次查询清空之前的结果,仅保留本次查询内容,把request.session['result_list'] = []放到POST判断逻辑的第一行即可。

二、修改index.html模板

核心改动点:

  • 补全缺失的form表单标签,确保提交逻辑正常
  • 用Django模板循环动态生成表格行,行数和查询的hostname数量完全对应
{% extends 'base.html' %}

{% block title %} IP Finder {% endblock %}

{% block body %}
<body>
<div>
    <!-- 补全form标签 -->
    <form method="post">
        {% csrf_token %}
        <div class="form-group">
            <label>
                <input type="text" class="form-control" name="search" placeholder="输入域名,多个用逗号/空格分隔" autocomplete="off">
            </label>
            <input type="submit" class="btn btn-primary" value="搜索">
        </div>
    </form>

    <div>
        <div id="section2">
            <center>
            <table class = "a">
              <tr>
                <th>ID</th>
                <th>Hostname</th>
                <th>IP Address(IPv4)</th>
                <th>IP Address(IPv6)</th>
                <th>Port 1</th>
                <th>Port 2</th>
              </tr>
              <!-- 循环遍历结果列表,动态生成行 -->
              {% for item in result_list %}
              <tr>
                <td>{{ forloop.counter }}</td>
                <td>{{ item.hostname }}</td>
                <td>{{ item.ipv4 }}</td>
                <td>{{ item.ipv6 }}</td>
                <td>{{ item.port1 }}</td>
                <td></td>
              </tr>
              {% empty %}
              <!-- 无查询结果时的提示 -->
              <tr>
                <td colspan="6" style="text-align:center;">暂无查询结果</td>
              </tr>
              {% endfor %}
            </table>
            </center>
        </div>
    </div>
</div>
</body>
{% endblock %}

内容的提问来源于stack exchange,提问作者ishu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:09:03