Django上传Excel并将4列内容分别在4个不同网页展示的问题求助
完整实现步骤及代码修正
你需要完成「用户上传Excel→后端解析存入数据库→分页面展示不同列数据」的全流程,现有代码的核心问题是未接收上传文件、未做数据持久化、查询对象和模板变量不匹配,按以下步骤修正即可:
1. 先安装依赖
解析xlsx格式需要对应依赖,执行安装命令:pip install pandas openpyxl
2. 修正models.py
你现有模型基本可用,补充调试用的魔术方法即可:
class Excel(models.Model): structure = models.CharField(("Structure"), max_length=150) segment = models.CharField(("Segment"), max_length=150) subsegment = models.CharField(("SubSegment"), max_length=150) element = models.CharField(("Element"), max_length=150) def __str__(self): return self.structure
3. 修正views.py
现有视图需要新增上传文件接收、Excel解析、数据入库逻辑,同时新增4个列对应的展示视图:
import pandas as pd from io import BytesIO from django.shortcuts import redirect from .models import Excel def upload(request): if request.method == "GET": return render(request, 'myapp/upload.html', {}) else: # 接收上传的Excel文件 excel_file = request.FILES.get('excel_file') if not excel_file: return render(request, 'myapp/upload.html', {'err_msg': '请先选择上传文件'}) # 解析Excel df = pd.read_excel(BytesIO(excel_file.read()), sheet_name = 'ItemDetails') # 遍历行存入数据库 for _, row in df.iterrows(): Excel.objects.create( structure = str(row['Structure']), segment = str(row['Segment']), subsegment = str(row['SubSegment']), element = str(row['Element']) ) # 上传完成跳转到结构列展示页,也可以自定义跳转页 return redirect('structure') # 展示structure列的视图 def structure(request): structures = Excel.objects.values_list('structure', flat=True).distinct() return render(request, 'myapp/structuremaster.html', {'datas': structures}) # 展示segment列的视图 def segment(request): segments = Excel.objects.values_list('segment', flat=True).distinct() return render(request, 'myapp/segmentmaster.html', {'datas': segments}) # 展示subsegment列的视图 def subsegment(request): subsegments = Excel.objects.values_list('subsegment', flat=True).distinct() return render(request, 'myapp/subsegmentmaster.html', {'datas': subsegments}) # 展示element列的视图 def element(request): elements = Excel.objects.values_list('element', flat=True).distinct() return render(request, 'myapp/elementmaster.html', {'datas': elements})
4. 补充/修正模板文件
上传页模板 myapp/upload.html
需要添加上传文件的表单,注意必须加enctype="multipart/form-data"属性:
<form method="post" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="excel_file" accept=".xlsx,.xls"> <button type="submit">上传</button> {% if err_msg %} <p style="color:red">{{ err_msg }}</p> {% endif %} </form>
列展示模板(以structuremaster.html为例,其他三个模板仅修改页面标题即可)
<table> <thead> <tr> <th>Structure列内容</th> </tr> </thead> <tbody> {% for item in datas %} <tr> <td>{{ item }}</td> </tr> {% endfor %} </tbody> </table>
5. 配置urls.py
在myapp的urls.py中添加对应路由:
from django.urls import path from . import views urlpatterns = [ path('upload/', views.upload, name='upload'), path('structure/', views.structure, name='structure'), path('segment/', views.segment, name='segment'), path('subsegment/', views.subsegment, name='subsegment'), path('element/', views.element, name='element'), ]
测试流程
- 启动服务后先访问
/upload页上传符合要求的Excel文件 - 上传完成后自动跳转到structure列展示页
- 分别访问
/segment、/subsegment、/element即可查看其他列的内容
内容的提问来源于stack exchange,提问作者user17085922
相关产品推荐
相关产品推荐

