如何通过更改此部分来设置django的动态下载路径:
(settings.MEDIA_ROOT,'folder / path / file.pdf')
with open(os.path.join(settings.MEDIA_ROOT, 'folder/path/file.pdf'), 'rb') as fh:
response = HttpResponse(fh.read(), content_type="application/pdf")
response['Content-Disposition'] = 'filename=invoice.pdf'
return response
这样的事情:
(settings.MEDIA_ROOT,FUNCTION_RETURN_THE_PATH)
with open(os.path.join(settings.MEDIA_ROOT, FUNCTION_RETURN_THE_PATH), 'rb') as fh:
response = HttpResponse(fh.read(), content_type="application/pdf")
response['Content-Disposition'] = 'filename=invoice.pdf'
return response
如果使用函数我得到很多错误,因为它在这个地方需要一个字符串变量而不是函数。
在我的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.upload_pdf.id %}"> Download </a></td>
下载链接进入视图:
def DownloadPdf(request, charge_id):
with open(os.path.join(settings.MEDIA_ROOT, get_file_path), 'rb') as fh:
response = HttpResponse(fh.read(), content_type="application/pdf")
response['Content-Disposition'] = 'filename=invoice.pdf'
return response
我存储pdf,基于这样的用户ID:
def invoice_path_base_to_usersid(instance, filename):
return 'user_{0}/{1}'.format(instance.customer.id, filename)
所以我将pdf存储到media / user_ {id} /filename.pdf
我希望用户在点击当前项目时下载特定的pdf文件。 但我不知道如何使用用户ID并将其置于开放状态下载当前用户想要的pdf。
答案 0 :(得分:0)
你还没有调用这个函数。
with open(os.path.join(settings.MEDIA_ROOT, get_file_path()), 'rb') as fh:
答案 1 :(得分:0)
最后我找到了一个解决方案,我在这里发布它是为了帮助那些在这方面苦苦挣扎的人。
我的主要问题是我尝试获取一个实例,并且在尝试加载文件之前我没有将其传递给任何变量。
我将open方法更改为,我发现最后一个更清晰。
def DownloadPdf(request, charges_id):
try:
invoice = Charge.objects.get(pk=charges_id)
except Charge.DoesNotExist:
raise Http404
response = HttpResponse(File(invoice.upload_pdf), content_type="application/pdf")
response['Content-Disposition'] = 'attachment; filename="mypdf.pdf"'
return response
所以答案是,如果你想在django中使用动态下载路径,你必须查询模型并将输出放在一个变量中。
之后,通过以这种方式调用此变量:
variable.field_of_model
您可以参考该记录的任何字段并根据需要使用