0

ユーザーがビューのフォームから画像をアップロードできるDjangoで開発されたプロジェクトがあります。データをフォームにバインドし、プロジェクトのデータベースに使用しているディレクトリ内の指定されたフォルダーに画像を保存できるという点で、その部分は正しく機能しているようです。しかし、ページをレンダリングしようとすると、次のような行が表示されます (アップロードされた画像のファイル名は「2220.jpg」です)。

GET http://localhost:8000/Users/.../project/database/user_uploads/08-30/2220.jpg 404 (NOT FOUND) 

画像をレンダリングするテンプレートの行は次のとおりです。

<img class="image" src="{{ entry.image.url }}"/>

私のsettings.pyの関連部分:

PROJECT_DIR = os.getcwd()
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'database', 'user_uploads')
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/static/'

画像を含むモデル:

def getImagePath(instance, filename):
"""Generates a path to save the file. These are timestamped by the
current date and stored in the databases directory.

Returns:
    Path for the file.
"""
date = datetime.date.today().strftime('%Y-%m-%d')
return os.path.join(
    os.getcwd(), 'database', 'user_uploads', date, filename)

class Entry(models.Model):
    # Other code omitted
    image = models.ImageField(upload_to=getImagePath)

ファイルシステム上のディレクトリだけでなく、ローカルホスト(またはより一般的には私のホスト名)を介して画像を提供するように求めているように見えるため、欠落しているURL構成がいくつかあると思います。ファイルの場所は正しいです。直接取得するのではなく、HTTP リクエストを実行しているようです。私は何が欠けていますか?わかりやすくするために追加情報を提供させていただきます。

前もって感謝します!

4

2 に答える 2

0

montiniz の回答に加えて、次のスレッドが役に立ちました。

Django MEDIA_URL と MEDIA_ROOT

基本的に私が見逃していたのは、MEDIA_ROOT からファイルを提供するための URL 構成でした。もう 1 つは、Django ImageField で url() パラメータを呼び出すと、完全修飾 URL 名、つまりファイルの完全な場所が返されることです。テンプレートから画像を提供するために必要なのは、MEDIA_ROOT 内の場所だけです。私の場合、この設定は「database/user_uploads」で、画像は「2013-09-02/images/2220.jpg」にありました。

したがって、必要な URL は次のとおりです。

「localhost:8080/media/database/user_uploads/2013-09-02/images/2220.jpg」

これが同じ問題を抱えている人に役立つことを願っています!

于 2013-09-02T21:13:17.217 に答える