如何在djang中设置文件的动态路径

2024-09-30 05:25:44 发布

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

我在一个项目,用户(客户)可以登录,可以查看有关他的发票的信息,下载(Pdf格式)等

当用户在管理面板中设置时,他的pdf文件被上传(用户可以有许多pdf文件)

当pdf被上传时,一个函数根据他的id创建文件夹,并将它们放入其中,所以我必须创建一个dynamicaly函数,当用户点击它时,可以下载正确的pdf文件。在

这是一个用于在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 %}

即使我尝试创建一个函数来设置路径dynamicali并将其转换为字符串django也告诉我它需要一个字符串而不是一个函数。在

^{pr2}$

我想将所选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')

它给了我一个错误:

Reverse for 'download_pdf' with arguments '('/media/user_4/invoice-alex-1.pdf',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['download/(?P\d+)/$']


Tags: 文件函数用户路径idurlforpdf
2条回答

您不需要编写视图来处理下载部分。今天的浏览器已经足够智能来处理下载部分了。在您的模板中,只需执行以下操作(假设在模板级别,您知道谁是用户以及要为他下载哪种类型的文件)。只需在视图上下文中传递所有这些信息,用户将有权下载内容。):

<a href="{{MEDIA_URL}}<your_file_with_id.pdf>">Download File</a>

就这样。浏览器将自动下载该文件。你不需要做其他任何事。在

毕竟我找到了一个可行的解决方案

我的主要问题是,我试图获取一个实例,在我试图加载文件之前,我没有将它传递到任何变量中。 我把打开的方法改为,我发现最后一个更清楚了。在

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

相关问题 更多 >

    热门问题