2016-11-14 4 views
0

をDjangoのためにダイナミックダウンロードパスを設定します。関数ではなく、この場所に文字列変数を期待するので、多くのエラーが発生します。は私が変更することで、この部分をDjangoのためにダイナミックダウンロードパスを設定するにはどうすればよい

私の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 

私のようなユーザーIDにPDF、ベースを保存しますこれ:

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

私はメディアにPDFを保存/ USER_ {ID} /filename.pdf

私はcurrectアイテムをクリックすると、特定のpdfファイルをダウンロードする必要があります。 しかし、私はどのようにユーザーIDを使用し、開いている中にそれがユーザーが望む真っ直ぐな1つのpdfをダウンロードするかを知らない。

+0

を望むようにそれを使用することができます。あなたの機能は何をしていますか?それは文字列を返しますか?あなたは実際にそれをどこでも呼んでいますか? –

+0

私はプロジェクト全体の解決策を求めていませんでした。私はopen(...)関数の直接の文字列パス以外のものを渡す方法があればうまくいきません。 –

+0

はい、もちろんです。文字列を返す関数を持っていて、そこで呼び出すと、Pythonはその違いを知ることができません。あなたは明らかにその中の1つを実行していませんが、実際のコードを見ることなく、何を知ることはできません。 –

答えて

0

最後に私は解決策を見つけました。

私の主な問題は、私はインスタンスを取得しようとしていましたが、ファイルをロードしようとする前に、変数に渡していません。

私はオープンメソッドを変更して、最後のものをより明確にしました。

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

あなたがそのレコードの任意のフィールドを参照して、これは非常に不明瞭である

0

あなたはこの関数を呼び出していません。

with open(os.path.join(settings.MEDIA_ROOT, get_file_path()), 'rb') as fh: 
+0

私はそれをして、私にエラーを与えます: FileDescriptor 'オブジェクトは呼び出し可能ではありません –

関連する問題