我已经使用https://www.pythoncircle.com/中准备的代码来使用Django导入和导出excel文件。下面提供了此代码:
from Django.shortcuts import render
import openpyxl
views.py file:
def index(request):
if "GET" == request.method:
return render(request, 'myapp/index.html', {})
else:
excel_file = request.FILES["excel_file"]
wb = openpyxl.load_workbook(excel_file)
worksheet = wb["Sheet1"]
print(worksheet)
excel_data = list()
for row in worksheet.iter_rows():
row_data = list()
for cell in row:
row_data.append(str(cell.value))
excel_data.append(row_data)
return render(request, 'myapp/index.html', {"excel_data":excel_data})
import xlwt
from django.http import HttpResponse
def download_excel_data(request):
response = HttpResponse(content_type='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename="ThePythonDjango.xls"'
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet("sheet1")
row_num = 0
font_style = xlwt.XFStyle()
font_style.font.bold = True
columns = ['Column 1', 'Column 2', 'Column 3', 'Column 4', ]
for col_num in range(len(columns)):
ws.write(row_num, col_num, columns[col_num], font_style)
# Sheet body, remaining rows
font_style = xlwt.XFStyle()
wb.save(response)
return response
urls.py file:
from django.urls import path
from django.http import HttpResponse
from . import views
app_name = "myapp"
urlpatterns = [
path('', views.index, name='index'),
path('', views.download_excel_data, name='download_excel_data'),
]
当我运行所描述的代码时,仅执行索引函数。而当我将urlpatterns更改为:urlpatterns = [
path('', views.download_excel_data, name='download_excel_data'),
path('', views.index, name='index'),
]
将执行download_excel_data函数。如何分别执行两个功能?在此先感谢
[DJANGO搜索URLS.py时,它正在搜索第一个匹配项。找到匹配项后,搜索结束,并提供URL中要求的功能。在使用诸如Vue或React之类的前端应用程序时,实际上可以利用这种行为来发挥自己的优势。
因此,当您拥有第一个索引时,DJANGO将URL与索引匹配,并执行索引视图。当您首先使用download_excel_data更改它们时,它将首先匹配,因此将执行。
如果您希望它们都一起执行,最简单的方法是将它们组合成一个视图。
通常,对于以下所有功能,python导入通常位于文件的顶部。在函数之间看到import语句似乎很奇怪。如果您感兴趣,PEP8中涵盖了有关Python的一大堆约定。
摘要:将它们合并在一个视图下。