2016-05-25 9 views
2

私はDjangoプロジェクトをやっていますが、というプロジェクトのプロジェクトがあります。このモデルでは、ファイルは/ media/files/YEAR/MONTH/DATE /にアップロードされるFileFieldを持っています。DjangoのファイルフィールドからファイルをURLやビューに追加するにはどうすればいいですか?

settings.py:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
MEDIA_URL = '/media/' 

models.py:

class Project(models.Model): 
    ... 
    file_upload = models.FileField(upload_to='files/%Y/%m/%d', max_length=100, null=True, blank=True, default='') 

テンプレート:/メディア/:

... 
{% if project.file_upload %} 
<tr> 
    <td>File</td> 
    <td><a href="{{ project.file_upload.url }}">{{ project.file_upload.name }} (Size: {{ project.file_upload.size|filesizeformat }})</a></td> 
</tr> 
{% endif %} 
... 

今ファイルへのリンクは次のようなものになるだろうファイル/ 2016/05/25/picture.pngまたは/media/files/2016/05 /25/report.pdf

現在、リンクをクリックすると、404ページが見つかりません。それは道がのurls.pyにないためですが、あなたは通常、URLにビューを追加するので、私はあなたが1つのファイルでそれをどうやって行うのか分かりません。必要ないだろう。

私はどのようにDjangoをURLで(そして、おそらくビューで)そのファイルを取得するのですか?リンクをクリックして、ブラウザで画像/ pdfを表示するか、単にファイルをダウンロードすることができます。

答えて

2

Djangoは静的ファイルを提供しません。提供されるように、これらのファイルを強制的にするときDEBUG=Trueurls.pyにこのコードを追加:あなたはviews.py

+0

おかげで静的ファイルについて、Djangoに指示する必要がありません

from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # ... the rest of your URLconf goes here ... ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

https://docs.djangoproject.com/en/1.9/howto/static-files/#serving-static-files-during-developmentから)

、それが働きました私はあなたのコードをmedia_urlとmedia_rootに変更して使用しました。私はそれを行うより良い方法があると思った。しかし、私はこれがしなければならないと思う。しかし、これはDebug = Falseでどのように動作しますか? – cenh

+0

debugがfalseの場合、メディアファイル、静的ファイル、および管理サイトファイルを提供する特別なサーバーが必要です。サーバーの例はlighttpdです。 – techydesigner

関連する問題