質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1534閲覧

djangoで保存した画像ファイルを表示する。

greatnutsby

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/29 08:38

前提・実現したいこと

djangoを使ってアップロードした写真のなかから管理者が許可した写真だけをギャラリーとして表示するウェブアプリを作ろうとしています。

発生している問題・エラーメッセージ

djangoのテンプレート内でdjangoテンプレート言語を使ってメディアディレクトリに保存してある画像を表示させたいのですができません。

該当のソースコード

#python

#settings.py

STATIC_URL = '/static/'

STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)

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

MEDIA_URL = 'media/'

#urls.py

from django.contrib import admin
from django.conf.urls.static import static
from django.urls import path,include
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

from django.conf import settings

urlpatterns = [
path('admin/', admin.site.urls),
path('',include('pic_upload_app.urls'))
]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

#view.py

from django.shortcuts import render
from django.views import generic
from .models import Picture
from .forms import *
from django.urls import reverse_lazy

class GarallyView(generic.ListView):
model = Picture
template_name = "garelly.html"

def get_queryset(self): return Picture.objects.filter(garally_admition=True)

#garelly.html

{% load static %}

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h2>Garelly</h2> <a href="{% url 'pic_upload_app:index' %}">go back home</a> {% for pic in object_list %} <h2>Uploader:{{ pic.uploader }}</h2> <img src="..{{ pic.photo.url }}" alt="pic" width="50%" height="50%"> <p>explanation</p> <br> <p>{{ pic.content }}</p> {% empty %} <p>empty</p> {% endfor %} <img src="" alt="pi"> </body> </html>

試したこと

同じような問題が生じている例が何個かあったので、書いてあったことは試した見ました(settings.pyにstatic()関数を導入)が写真だけ表示されません。他のpic.uploaderとpic.contentはhtmlでちゃんと表示されます。
画像だけが表示されません。

ここに問題に対して試したことを記載してください。

補足情報

ディレクトリ構成は次のようになっています。
|pic_upload_app|-|config|-|settings.py,urls.py|
|:--|:--:||
|||media|-|garelly-jpegfile|||
|||pic_upload_app|-|garelly.html|
|||static|
|||manage.py|

リクエストしたときに帰ってくるhtml内の{{pic.photo.url}}はつぎのように展開されているようです。(デベロッパーツールで確認)
/media/garelly/665359F0-0F9B-4A4E-B2CB-731454FB0DB5.jpeg

GET http://192.168.3.20:8080/media/garelly/665359F0-0F9B-4A4E-B2CB-731454FB0DB5.jpeg 404 (Not Found)

#レスポンスhtml

<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h2>Garelly</h2> <a href="/">go back home</a>
<h2>Uploader:頼む</h2> <img src="/media/garelly/665359F0-0F9B-4A4E-B2CB-731454FB0DB5.jpeg" alt="pic" width="50%" height="50%"> <img src="" alt="pi"><p>explanation</p> <br> <p>今度はどうだ</p> <p>koi</p>
</body>

どなたか、よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sfdust

2020/09/29 14:58

ソースコードは「該当のソースコードを挿入」のテンプレードにしたがって挿入してください。 (そのままだとインデントが省略されてしまうため)
guest

回答1

0

自己解決

理由はわかりませんが

settings.py内で
DEBUG をFalseからTrueにすることで解決しました。

本番環境では
DEBUG = Falseにして静的ファイルはwebサーバに処理を任せるようです。

投稿2020/09/30 08:36

greatnutsby

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問