我在一个项目,用户(客户)可以登录,可以查看有关他的发票的信息,下载(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+)/$']
您不需要编写视图来处理下载部分。今天的浏览器已经足够智能来处理下载部分了。在您的模板中,只需执行以下操作(假设在模板级别,您知道谁是用户以及要为他下载哪种类型的文件)。只需在视图上下文中传递所有这些信息,用户将有权下载内容。):
就这样。浏览器将自动下载该文件。你不需要做其他任何事。在
毕竟我找到了一个可行的解决方案
我的主要问题是,我试图获取一个实例,在我试图加载文件之前,我没有将它传递到任何变量中。 我把打开的方法改为,我发现最后一个更清楚了。在
相关问题 更多 >
编程相关推荐