【问题标题】:How can execute two functions respectively in Django?如何在 Django 中分别执行两个函数?
【发布时间】:2020-08-13 14:10:26
【问题描述】:

我已经使用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 python-3.x django-models django-views django-urls


    【解决方案1】:

    当 DJANGO 搜索 URLS.py 时,它正在搜索第一个匹配项。当它找到匹配项时,搜索结束并提供 URL 中调用的函数。在使用 Vue 或 React 等前端应用程序时,您实际上可以利用这种行为来发挥自己的优势。

    因此,当您首先拥有索引时,DJANGO 将 URL 与索引匹配并执行索引视图。当您首先使用 download_excel_data 更改它们时,它会首先匹配,因此它会执行。

    如果您希望它们一起执行,最简单的方法可能是将它们组合到一个视图中。

    在风格上,python 导入通常位于以下所有函数的文件顶部。在函数之间看到 import 语句似乎很奇怪。如果您有兴趣,PEP8 中涵盖了一大堆 Python 约定。

    总结:将它们组合在一个视图下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      相关资源
      最近更新 更多