【问题标题】:Django - how to download a fileDjango - 如何下载文件
【发布时间】:2020-04-09 06:40:49
【问题描述】:

我正在尝试在我的模板中为我的网站生成的 CSV 文件创建一个下载按钮(我是 Django 新手)。我已经创建了视图函数并更新了urls.py,但我得到了

'DoesNotExist:页面匹配查询不存在'

当我输入 URL ('http://127.0.0.1:8000/download_table') 时。我还想知道如何在我的 HTML 模板中创建下载链接/按钮。

views.py:

def download_csv(request):
    table_selected = request.POST.get('Table_select')
    index_of_table_selected = int(re.search(r'\d+$', table_selected).group())
    result_json_selected = request.session.get('result', 'missing')[index_of_table_selected]
    dataframe_selected = pd.read_json(result_json_selected)
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename=%s' % 'Table.csv'
    dataframe_selected.to_csv(path_or_buf=response, sep=';', float_format='%.2f', index=False, decimal=",")

    return response

urls.py:

urlpatterns = [
    path('', views.index, {'pagename': ''}, name='home'),
    path('<str:pagename>', views.index, name='index'),
    path('download_table/', views.download_csv, name='download_csv'),]

另外,我在模板中添加了什么?像这样?

<a href="download_table/" download> Download File</a>

该链接返回错误

TypeError: download_csv() 得到了一个意外的关键字参数 '文件路径'

【问题讨论】:

  • 使用download_csv(request, **kwargs)并打印kwargs,你会明白的
  • 上面写着{'filepath': 'download_table'}。我该怎么办?对不起,我是新手...

标签: python django download


【解决方案1】:

您得到 404 因为这是“应用”级别 urls.py,您需要将其链接到“项目”级别 urls.py

第二个错误是因为download_csv(request) 应该是download_csv(request, filepath) 或者更好,使用download_csv(request, **kwargs) 它说它有一个参数(例如 localhost:8000/argument/ )并且你没有变量来包含它。

【讨论】:

  • 我认为是链接到项目级别urls.py,我有这个:urlpatterns = [ path('admin/', admin.site.urls), path('', include('ReadABS.urls')) ]
  • 啊,好的,我现在可以使用了,谢谢!有 2 个问题(但不是 urls.py)。 1 是添加 **kwargs (这让我的一部分,错误信息改变了),下一个问题是table_selected = request.POST.get('Table_select')。显然,发布请求在此视图函数中不起作用(不知道为什么,但无论如何),但我使用 request.session = 将“table_selected”从我的其他函数视图保存到会话中,然后我能够将该数据获取到该视图函数中.无论如何,它现在有效。花了半天时间在那个问题上挠头!谢谢
  • 使用if request.method == 'POST',或使用CBV,了解它们in this awesome guide
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
相关资源
最近更新 更多