モデルから関数定義を呼び出すことができるとわかっていましたが、アップロードしたドキュメントのファイル名を抽出できないようです。Python Djangoテンプレートはモデル関数から名前を取得できません
.htmlのバージョン1つの
<form action="." method="GET">
{% if documents %}
<ul>
{% for document in documents %}
<li> {{ document.docfile.filename }}
<input type = "submit" name="load-data" value="Add to Layer"/>
</li>
{% endfor %}
</ul>
結果:それはちょうどボタンを示し、私の下には、次のテンプレート形式が、どちらか私の所望の出力からの結果を試してみました。
.htmlをバージョン2
<form action="." method="GET">
{% if documents %}
<ul>
{% for document in documents %}
<li> {{ document.filename }}
<input type = "submit" name="load-data" value="Add to Layer"/>
</li>
{% endfor %}
</ul>
結果:それはちょうどボタンを示しています。
.htmlをバージョン3
<form action="." method="GET">
{% if documents %}
<ul>
{% for document in documents %}
<li> {{ document.docfile.name }}
<input type = "submit" name="load-data" value="Add to Layer"/>
</li>
{% endfor %}
</ul>
結果は:完全なパス名を印刷します(例:/documents/2016/10/08/filename.csv)一緒にボタンで
残りのコードは次のとおりです。
models.py
class Document(models.Model):
docfile = models.FileField(upload_to='document/%Y/%m/%d')
def filename(self):
return os.path.basename(self.file.name)
views.py
documents = Document.objects.all()
return render(request, 'gridlock/upload-data.html',
{
'documents' : documents,
'form': form
})
私は誰かが、私が試した理由をすべて説明することができます願っています: {{ document.docfile.filename }}
または{{document.file.filename}}
または{{document.filename}}
はどちらか私のために動作しませんか?ありがとう!
より良いアプローチは、モデルを編集するのではなく、テンプレートタグを作成することです。上記の回答から[SO Post] [1]を確認してください。テンプレートタグの作成に関する回答が見つかります。 [1]:http://stackoverflow.com/questions/2683621/django-filefield-return-filename-only-in-template – cutteeth