web-dev-qa-db-ja.com

Djangoテンプレートに読み込まないでImageImageからの画像

ローカルマシンでDjango(1.5.1)を使用してギャラリーを構築しています。アルバムモデルにはImageFieldがあります。アルバムのすべての画像を表示するビューがあります。うまく機能しますが、最後には画像が表示されません。ご覧のように画像の境界線がありますが、画像は読み込まれません。

スクリーンショット

enter image description here

models.py

_class Category(models.Model):
 ###  
class Album(models.Model):   
    category = models.ForeignKey(Category, related_name='albums')
 ###
class Image(models.Model):
    album = models.ForeignKey(Album)
    image = models.ImageField(upload_to = 'images/albums/')
_

views.py

_def detail(request, album_id):
    album = get_object_or_404(Album, pk=album_id)
    return render(request, 'gallery/detail.html', {'album': album})
_

detail.html

_<h1>{{ album.title }}</h1>
{% for image in album.image_set.all %}
  <a>  <img src="{{ image.image.url }}" height="420"></a>
{% endfor %}
_

これが私のアルバムアドレスの場合:_http://localhost:8000/gallery/1/_

画像のURLは次のとおりです:http://localhost:8000/media/images/albums/photo_4.JPG (I get 404 when enter it in browser)

このメディアルートとURL:

_MEDIA_ROOT = '/media/'    
MEDIA_URL = '/localhost:8000/media/'  
_

私のメディアルートには777許可があります。

私は今どうすればいい?問題はどこにありますか?

17
sheshkovsky

何が問題なのか手がかりがあります。 MEDIA_URLは次のようになります。

MEDIA_ROOT='<the full path to your media folder>' (i.e: '/home/ike/project/media/')
MEDIA_URL='/media/'

先頭のスラッシュ文字に注意してください。これは、メディアがルートサーバーフォルダー内のフォルダーであり、それを呼び出す他のURLとは関係がないためです。

そして、これらの行をurls.pyファイルの最後に追加します:

# You might need to import static function like this:
#from Django.contrib.staticfiles.urls import static

urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

次のドキュメントを確認できます。 https://docs.djangoproject.com/en/dev/howto/static-files

お役に立てれば

33
Paulo Bu

Devサーバーを使用している場合は、urls.pyに何かを追加してDjangoメディアファイルを提供する必要があります、cf:

1.4.x: https://docs.djangoproject.com/en/1.4/howto/static-files/#serving-other-directories 1.5.x: https:// docs .djangoproject.com/en/dev/howto/static-files /#serving-files-uploaded-by-a-user

5

ソース: https://docs.djangoproject.com/en/dev/howto/static-files/#serving-files-uploaded-by-a-user

 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)

アップロードされたファイルを提供するには、URLパターンに追加する必要があります

2
Saher Ahwal

settings.pyを確認してくださいMEDIA_ROOTおよび 'MEDIA_URL'(およびそれらは正しい)。 MEDIA_ROOTは、メディアが保存されるマシン上の絶対フォルダーを指定します。

例として:

MEDIA_ROOT = '/myfolder/'

これは、次の場所で画像を探すことを意味します。

/myfolder/images/albums/

次のsettings.pyMEDIA_ROOT場所:つまり.

MEDIA_URL = 'http://localhost/myfolder/'

あなたの画像:

<img src="{{ MEDIA_URL }}{{ image.image.url }}" height="420"></a>

これは次のことに関連します。

http://localhost/myfolder/images/albums/

お役に立てれば。

2
Glyn Jackson

details.html内で、

img src="{{ image.image.url }}" height="420"

img src="your_app/media/{{ image.image.url }}" height="420"

これがお役に立てば幸いです。そうでない場合は、詳細をお知らせいたします。

1
Amimo Benja

上記の各回答から少しずつ取り上げました。私はあなたと同じ問題を抱えていました。現在の/blog/post/(media_url)/image.jpgから指示されていた収益を得ていました

管理ポータルで簡単に表示して編集できました。しかし、私のpost.htmlでは、{{MEDIA_URL}}を追加するまで問題がありました-

それが私が行方不明だったすべてです。

他の人がそれを読んで、何が欠けているかを見ることができるように、以下のセクション全体を投稿しました。

post.html:

    <label for="id_image">  <img src="{{ MEDIA_URL }}{{ p.image.url }}" 
    title="{{ p.title }}"> </label>

models.py:

    from Django.core.files.storage import FileSystemStorage

    upload_location =
    FileSystemStorage(location='/home/pi/djcode/xpcpro/xpcpro/images')

    class Blog(models.Model):
        title = models.CharField(max_length=255)
        author = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
        date = models.DateTimeField(auto_now=False, auto_now_add=True)
        body = models.TextField()
        image = models.ImageField(
            storage=upload_location, null=True,
            blank=True, width_field="width_field",
            height_field="height_field",)
        height_field = models.IntegerField(default=0)
        width_field = models.IntegerField(default=0)

urls.py:

    from Django.conf.urls.static import static
    from Django.contrib.staticfiles.urls import staticfiles_urlpatterns

    urlpatterns += staticfiles_urlpatterns()
    urlpatterns += static(settings.MEDIA_URL,
    document_root=settings.MEDIA_ROOT)

settings.py:

    MEDIA_ROOT = "/home/pi/djcode/xpcpro/xpcpro/images/"
    MEDIA_URL = "/images/"
0
jMrL

私はこの質問が古いことを知っていますが、すべてのオプションを証明した直後に解決しました:

  1. settings.py:
 MEDIA_URL = '/media/'
 MEDIA_ROOT = os.path.join(BASE_DIR、' media ')
  1. urls.py危険!!!ここで私のエラーの1つは、my_app/urls.pyを使用したことです... my_app/urls.pyを使用する場合は、「/ namespace_name {{image.image.url}}」をimg 'srcに追加する必要があります。
 from Django.conf.urls.static import static 
 from Django.contrib.staticfiles.urls import staticfiles_urlpatterns 
 from Django.conf import settings 
 
 urlpatterns + = staticfiles_urlpatterns()
 urlpatterns + = static(settings.MEDIA_URL、document_root = settings.MEDIA_ROOT)
  1. テンプレート、detail.html
 img src = "{{image.image.url}}" alt = "{{image.title}}" 

注:MEDIA_URLは不要です。image.image.urlは絶対なので、「/」に注意してください。名前空間を使用する場合は、最後のスラッシュを追加する必要はありません。

 img src = "/ namespace_name/{{image.image.url}}"->悪い!!! 
 img src = "/ namescape_name {{image.image.url}}" ->良い!!! 
0
Leaf