如何在Python Django应用中利用JSON数据生成网页下拉列表
Django集成Excel数据生成下拉列表解决方案
我是Python新手,正在开发Django Web应用,需要读取Excel文件中的数据并在网页上以下拉列表形式展示。已创建应用结构,编写了Excel转JSON的脚本:
import pandas import json # Read excel document excel_data_df = pandas.read_excel('Test-Data.xlsx', sheet_name='Sheet1') # Convert excel to string # (define orientation of document in this case from up to down) thisisjson = excel_data_df.to_json(orient='records') # Print out the result print('Excel Sheet to JSON:\n', thisisjson) thisisjson_dict = json.loads(thisisjson) with open('data.json', 'w') as json_file: json.dump(thisisjson_dict, json_file)
脚本输出的JSON数据:
[{"Name":"Jan","Month":1},{"Name":"Feb","Month":2},{"Name":"March","Month":3},{"Name":"April","Month":4},{"Name":"May","Month":5},{"Name":"June","Month":6},{"Name":"July","Month":7},{"Name":"August","Month":8},{"Name":"Sep","Month":9},{"Name":"October","Month":10},{"Name":"November","Month":11},{"Name":"December","Month":12}]
期望实现的下拉列表效果对应的HTML:
<!DOCTYPE html> <html> <body> <h1>The select element</h1> <p>The select element is used to create a drop-down list.</p> <form action=""> <label for="months">Choose a Month:</label> <select name="months" id="month"> <option value="1">Jan</option> <option value="2">Feb</option> <option value="3">March</option> <option value="4">April</option> </select> <br><br> <input type="submit" value="Submit"> </form> </body> </html>
当前需解决:如何将上述功能集成到Django应用中,利用生成的JSON数据创建网页下拉列表。
步骤1:整合Excel解析逻辑到Django视图
无需单独生成JSON文件,直接在视图中解析Excel并传递数据给模板:
- 先安装依赖:
pip install pandas openpyxl
- 在应用的
views.py中添加视图函数:
from django.shortcuts import render import pandas def month_dropdown(request): # 将Test-Data.xlsx放到项目根目录,或使用绝对路径 excel_data_df = pandas.read_excel('Test-Data.xlsx', sheet_name='Sheet1', engine='openpyxl') # 直接转换为字典列表,跳过JSON文件存储步骤 months_data = excel_data_df.to_dict(orient='records') return render(request, 'month_dropdown.html', {'months': months_data})
步骤2:配置URL路由
- 在应用的
urls.py中添加路由:
from django.urls import path from . import views urlpatterns = [ path('months/', views.month_dropdown, name='month_dropdown'), ]
- 将应用路由包含到项目根目录的
urls.py:
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('', include('your_app_name.urls')), # 替换为你的应用名称 ]
步骤3:编写Django模板渲染下拉列表
在应用的templates目录下创建month_dropdown.html:
<!DOCTYPE html> <html> <body> <h1>The select element</h1> <p>The select element is used to create a drop-down list.</p> <form action=""> <label for="months">Choose a Month:</label> <select name="months" id="month"> {% for month in months %} <option value="{{ month.Month }}">{{ month.Name }}</option> {% endfor %} </select> <br><br> <input type="submit" value="Submit"> </form> </body> </html>
可选:读取预生成的JSON文件
若坚持使用已生成的data.json,视图可修改为:
from django.shortcuts import render import json def month_dropdown(request): with open('data.json', 'r') as json_file: months_data = json.load(json_file) return render(request, 'month_dropdown.html', {'months': months_data})
注意事项
- 确保Excel文件路径正确,建议放到项目根目录或应用的
static目录 - 若Excel数据会更新,可使用Django管理命令定时重新解析,或在视图中添加缓存避免重复读取
- 生产环境建议将Excel数据存入数据库,从数据库读取生成下拉列表,提升性能
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

