簡體   English   中英

將動態下載路徑設置為django

[英]Set dynamic download path to django

我如何通過更改此部分來設置django的動態下載路徑:

(settings.MEDIA_ROOT,“文件夾/路徑/文件.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)

with open(os.path.join(settings.MEDIA_ROOT, FUNCTION_RETURN_THE_PATH), 'rb') as fh:
    response = HttpResponse(fh.read(), content_type="application/pdf")
    response['Content-Disposition'] = 'filename=invoice.pdf'
    return response

如果使用函數,我會遇到很多錯誤,因為它期望在該位置使用字符串變量而不是函數。

在我的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,基於這樣的用戶ID:

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

所以我將pdfs存儲到media / user_ {id} /filename.pdf

我希望用戶單擊當前項目時下載特定的pdf文件。 但是我不知道如何使用用戶ID並將其放在公開位置以下載用戶想要的當前一個pdf。

您尚未調用該函數。

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中動態下載路徑,則必須查詢模型並將輸出放入變量中。

之后,通過這種方式調用此變量:

variable.field_of_model

您可以引用該記錄的任何字段並根據需要使用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM