因此,我尝试将PDF的名称传递给URL,以便视图可以显示相关的PDF
网址.py
path('show-invoice/<str:invoice>', views.pdf_view, name ="pdfview")
视图.py
def pdf_view(request, invoice):
invoicename = Laptop.objects.get(invoice=invoice)
invoicename = invoicename.invoice
pdfpath = settings.MEDIA_ROOT + invoicename
pdfpath = pdfpath.replace('/', '\\')
try:
return FileResponse(open(pdfpath, 'rb'), content_type='application/pdf')
except FileNotFoundError:
raise Http404()
型号.py
invoice = models.FileField(default='default.pdf', upload_to='uploads/')
发票清单.html
<h2>View invoices</h2>
{%for i in invoices%}
<ul>
<li>
<a href = "{%url 'laptops:pdfview' invoice=i.invoice%}"> {{i.invoice}} </a>
</li>
</ul>
{%endfor%}
现在,我的问题是:为什么当我使用invoice='default.pdf'
时它工作,而当我使用invoice=i.invoice
时它不工作?我得到以下错误
NoReverseMatch at /invoices/
Reverse for 'pdfview' with keyword arguments '{'invoice': 'uploads/default1.pdf'}' not found. 1 pattern(s) tried: ['show\\-invoice\\/(?P<invoice>[^/]+)$']
因为在路径中使用的
str
转换器与invoice属性中的\
不匹配您可以改用^{} 转换器:
相关问题 更多 >
编程相关推荐