ich an einem Projekt, dass der Benutzer (Kunde) arbeiten anmelden und Informationen über seine Rechnungen einsehen können, laden Sie sie (im PDF-Format) usw.Wie dynamischen Pfad zu einer Datei in django setzen
Wenn Benutzer setted Im Adminbereich werden seine PDF-Dateien hochgeladen (Benutzer kann viele PDF-Dateien haben)
Wenn Pdfs hochgeladen wird, erstellen eine Funktion Ordner basierend auf seiner ID, und legen Sie sie in, also muss ich eine Dynamicaly-Funktion erstellen, die heruntergeladen wird die richtige PDF-Datei, wenn der Benutzer darauf klickt.
Dies ist eine in HTML, die alle „Gebühren“ zu Benutzer druckt:
{% 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 %}
Auch ich versuche, eine Funktion zu erstellen, die den Pfad dynamicaly setzt und es in einen String django Umwandlung sagt mir, dass ein erwartet String und keine Funktion.
def DownloadPdf(request, charge_id):
with open(os.path.join(settings.MEDIA_ROOT,models.Charge.upload_pdf.url, 'rb') as fh:
response = HttpResponse(fh.read(), content_type="application/pdf")
response['Content-Disposition'] = 'filename=invoice.pdf'
return response
Ich möchte die URL der ausgewählten PDF-Basis in die ID einfügen. Aber ich weiß nicht, wie man die URL herauszieht und sie mit dem anderen Medienpfad verbindet und korrekt die ID verwendet.
bearbeiten
wenn ich das ändern:
url(r'^download/(?P<charge_id>\d+)/$', views.DownloadPdf, name='download_pdf'),
und diese:
with open(os.path.join(settings.MEDIA_ROOT, charge_id), 'rb')
es gibt mir diesen Fehler:
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+)/$']