【发布时间】:2017-03-24 16:46:22
【问题描述】:
我正在做一个项目,用户(客户)可以登录并查看有关他的发票的信息,下载它们(PDF格式)等。
当用户在管理面板中设置时,他的pdf文件被上传(用户可以有很多pdf文件)
上传 Pdfs 时,一个函数会根据他的 id 创建文件夹并将它们放入,所以我必须创建一个动态函数,当用户单击它时下载正确的 pdf 文件。
这是一个 for in html 向用户打印所有“费用”:
{% for printforme in print_user_charges %}
<tr>
<td>{{ printforme.invoice_number }}</td>
<td>{{ printforme.price }} €</td>
<td>{{ printforme.reason }}</td>
<td>{{ printforme.customer }} {{ printforme.customer.surname }}</td>
<td>{{ printforme.charge_date }}</td>
<td> <a href="{% url 'download_pdf' printforme.id %}"> Download </a></td>
{% endif %}
即使我尝试创建一个动态设置路径并将其转换为字符串的函数,django 告诉我需要一个字符串而不是函数。
def DownloadPdf(request, charge_id):
with open(os.path.join(settings.MEDIA_ROOT,models.Charge.upload_pdf.url, 'rb') as fh:
response = HttpResponse(fh.read(), content_type="application/pdf")
response['Content-Disposition'] = 'filename=invoice.pdf'
return response
我想将所选 pdf 库的 url 插入到 id 中。但我不知道如何提取 url 并将其与其他媒体路径链接并正确使用 id。
编辑
如果我改成这样:
url(r'^download/(?P<charge_id>\d+)/$', views.DownloadPdf, name='download_pdf'),
还有这个:
with open(os.path.join(settings.MEDIA_ROOT, charge_id), 'rb')
它给了我这个错误:
未找到带有参数“('/media/user_4/invoice-alex-1.pdf',)”和关键字参数“{}”的“download_pdf”的反向操作。尝试了 1 种模式:['download/(?P\d+)/$']
【问题讨论】:
标签: python django function dynamic download