将动态下载路径设置为djang

2024-09-30 05:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

如何通过更改此部分设置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)

^{pr2}$

如果一个use函数我会得到很多错误,因为它需要一个字符串变量,而不是一个函数。在

在我的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,base存储到用户id,如下所示:

def invoice_path_base_to_usersid(instance, filename):
return 'user_{0}/{1}'.format(instance.customer.id, filename)

所以我将pdf存储到media/user{id}/文件名.pdf在

我希望用户下载一个特定的pdf文件,当他点击当前项目。 但我不知道如何使用用户id,并把它放在打开的地方下载当前用户想要的pdf文件。在


Tags: path用户idreturnsettingspdfresponseinvoice
2条回答

你还没有调用函数。

with open(os.path.join(settings.MEDIA_ROOT, get_file_path()), 'rb') as fh:

最后,我找到了一个解决方案,我把它贴在这里,以帮助任何与之斗争的人。

我的主要问题是,我试图获取一个实例,在我试图加载文件之前,我没有将它传递到任何变量中。

我把打开的方法改为,我发现最后一个更清楚了。

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中找到一个dynamical下载路径,你必须查询你的模型并将输出放入一个变量中。

之后,通过调用此变量,以这种方式:

variable.field_of_model

您可以引用该记录的任何字段并根据需要使用它

相关问题 更多 >

    热门问题