2017-08-08 17 views
1

現在Django 1.9を使用しています。私のモデルで 画像ファイルが Djangoメディアファイルのパスが正しくない、ディレクトリがありません

がしかし、画像は\メディアずにファ​​イルパスを使用して表示されるようにしようとしている

プロジェクト\メディアの\ FILEPATH.jpgに適切にアップロードされています。例えば、私は私のブラウザで私はlocalhost http://127.0.0.1:8000/media/FILEPATH.jpgに行くときDjangoのget要求が探しているので、私は404を得る:

プロジェクトの\ FILEPATH.jpg私はDjangoは奉仕するために取得するにはどうすればよい

私のメディアファイルは\ media \で正しく記録されますか?


詳しい情報には、任意の使用であってもよい場合:
settings.py:

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

モデル:私のようにurlpatterns後に次き
image = models.ImageField(upload_to='media', blank='true')

プロジェクトのurls.pyドキュメントごと:

static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

ありがとうございました!

models.py

class Post(models.Model): 
    ptype = models.ForeignKey('blog.Type', related_name='posts') 
    title = models.CharField(max_length = 100) 
    text = models.TextField() 
    published_date = models.DateTimeField(default=timezone.now) 

    def __str__(self): 
    return self.title 
class Image(models.Model): 
    post = models.ForeignKey('blog.Post', related_name='images') 
    image = models.ImageField(upload_to='media', blank='true') 

views.py

class Posts(generic.ListView): 
    model = Post 
    context_object_name = 'posts' 
    template_name = 'blog/posts.html' 

posts.html

{% extends "blog/base.html" %} 
{% block content %} 

{% for post in posts %} 
    <p><a href = "{% url 'blog:postdetail' pk=post.pk %}">{{post.title}}</a></p> 
    <p>{{post.text}}</p> 
    {% for image in post.image_set.all %} 
    <img src="{{ image.image.url }}"> 
    {% endfor %} 
{% endfor %} 
{% endblock %} 
+0

htmlパーツを投稿してください。 'src'属性に' .url'を追加するのを忘れたのでしょうか?例: '' – hansTheFranz

+0

@hansTheFranz質問にもっと多くのコンテキストを追加しました。応答を感謝します。 – dolanplz

+0

'{post.image_set.all%}内の画像% 'のキーワード' image'がPythonを混乱させると思います。単に 'x'と呼んでいます。 ''を使用すると、最初の 'image'はあなたが定義したモデルではない4つのループ変数を参照します。少なくとも、問題はそこにあると思う。フットループで 'image'を' x'に変更すると( 'src'部分にはありません)、forループを削除しないとどうなりますか? URLは正しいですか? – hansTheFranz

答えて

0

[OK]を

あなたの宣言がモデル上のアップロード、Djangoは検出自動的にあなたのルートメディアがBASE_DIR/mediaである場合、モデルにupload_toを入れると、この画像をBASE_DIR/media/somethingに保存する必要があることを宣言しています。

例:ユーザーの画像をメディアに保存するにはメディアが/あなたの画像フィールドので、「画像」のあなたのフィールドに保存された後、モデル

image = models.ImageField(upload_to='users/', blank='true') 

上でこれを作り、私のイメージは、ローカルホスト/メディア/ユーザーに保存されます/ FILEPATH.jpg

このすべてのURL 'users/FILEPATH.jpg'とは表示されますが、ローカルホスト/メディアは表示されません。

のザッツはなぜあなたは

<img src="/media/{{ image.image }}"> 

をsrcをに/ /メディアを記述する必要があり、「イメージ」という名前のフィールドに画像を保存する場合は、あなたのする.urlを必要としません。

お試しください。

+0

あなたの言っていることが分かります。 upload_to属性はすでにメディアの場所を認識しているため、/ media/mediaを検索していたため、私のパスを把握できなかったのです。私はupload_toに、はるかに意味のあるサブディレクトリを含めるように変更しました。ご協力ありがとうございました!!!! – dolanplz

関連する問題