Djangoのデプロイで画像エラー|【結論】staticのファイルパスを再チェック

※このページには広告が含まれています 。

こんにちは、つむぎゆりです!

今Djangoでアプリを作っているのですが……。

いつのまにかユーザーがログインした際の、デフォルト画像がNoneになっていることに気づきました。

結論からいうと、

def get_open_eyes_image_url(self):

return self.open_eyes_image.url if self.open_eyes_image else ‘/images/eyes.png’

こういった、デフォルトの画像パスを指定していたところを、

def get_open_eyes_image_url(self):

return self.open_eyes_image.url if self.open_eyes_image else ‘/static/images/eyes.png’

/static/を前につけるだけで解決しました。

これがうまくいかなくて数日間ハマりにハマりまくっていたのですが、解決して本当に嬉しかったですねw

初期費用0円、年会費0円
サーバーレンタル料0円
配送料0円
ボトル1本(12L)1,674円〜
天然水ウォーターサーバー
ウォーターワンがおすすめ!!

ウォーターワン

初期費用0円
年会費0円
サーバーレンタル料0円
配送料0円

0円ずくしの天然水
ウォーターサーバー
試してみませんか?

ボトル1本(12L)1,674円〜
お得価格で天然水
ご家庭にお届け!

お届けは最大2ヶ月スキップ可能
だからお水が余る心配なし
(お水の賞味期限は未開封で
6ヶ月、装着後1ヶ月)

富士山南阿蘇島根沖縄
4つの採取地を選べます!!

リンク先のページで申し込みを
するとお水代1ヶ月無料
Amazonギフトカード3000円分
がついてくる!

12L 1,674円
天然水ウォーターサーバー
ウォーターワン
が本当におすすめ!!

期間限定キャンペーン中

ウォーターワン

最もハマった部分

STATICFILES_DIRS = [os.path.join(BASE_DIR, ‘myapp/static’)]

STATIC_URL = ‘/static/’

STATIC_ROOT = BASE_DIR / ‘static’ # 静的ファイルを収集するディレクトリ

とあった場合、フロントエンド側ではstatic部分が省略されてるんですよ。

if ‘reset_defaults’ in request.POST:

# デフォルトの背景色にリセット

character.selected_color = “#ffffff”

default_images = {

‘body_image’: ‘images/body.png’,

‘closed_eyes_image’: ‘images/eyes_close.png’,

‘open_eyes_image’: ‘images/eyes.png’,

‘open_mouth_image’: ‘images/mouth_open.png’,

‘half_open_mouth_image’: ‘images/mouth_half.png’,

‘closed_mouth_image’: ‘images/mouth_close.png’,

‘background_image’: None

}

こういった具合に。もしくはテンプレート側だと以下のとおりです。

{% if character.get_closed_mouth_image_url %}

<img id=”mouth-image-user” src=”{{ character.get_closed_mouth_image_url }}” alt=”Closed Mouth” class=”character-part user-uploaded-image user-mouth”>

{% else %}

<img id=”mouth-image” src=”{% static ‘images/mouth_close.png’ %}” alt=”Closed Mouth” class=”character-part”>

{% endif %}

つまり、クライアント側に渡すファイルパスはstackを抜くが、バックエンド側はstackを足して指示する必要があったんですね。

…なんでDjangoの画像周りはこんな周りくどいことしたの?なーぜなーぜ?

まあとにかくw、無事エラーがなくなって今はスッキリとした、明鏡止水に近い心持ちでございます笑

初期費用0円
年会費0円
サーバーレンタル料0円
配送料0円

0円ずくしの天然水
ウォーターサーバー
試してみませんか?

ボトル1本(12L)1,674円〜
お得価格で天然水
ご家庭にお届け!

お届けは最大2ヶ月スキップ可能
だからお水が余る心配なし
(お水の賞味期限は未開封で
6ヶ月、装着後1ヶ月)

富士山南阿蘇島根沖縄
4つの採取地を選べます!!

リンク先のページで申し込みを
するとお水代1ヶ月無料
Amazonギフトカード3000円分
がついてくる!

12L 1,674円
天然水ウォーターサーバー
ウォーターワン
が本当におすすめ!!

期間限定キャンペーン中

ウォーターワン

エラーのURLにNoneがあった場合プレースホルダーなのでNoneを探すと解決

あと、バックエンド周りを作ったのが1ヶ月くらいまえで、最近はVPS周りを作っていたので、まあまあにどれがどのコードだったか忘れていたのも要因でしたw

エラーがでたとき、URLの部分がNoneになっていて、そんなの設定したっけ?と思っていたんですよ。

ところが、これ、GPTがプレースホルダーとしてURLを仮で置いてたんですね。

なので、もしコンソールのURLにNoneがあった場合、かつその場所がわからない場合、とにかくバックエンドで文字列を検索しまくればどこでエラーが出てるかわかりやすいと思います。

▶高校を受験せずお笑い芸人を目指す→ネタ見せ2年→小説を10年間で110作投稿し新人賞受賞→漫画で同人作家7年→マーケティング&プログラム1年→フリーランスのブロガー(所持ブログ10本以上)

つむぎゆりをフォローする

 

タイトルとURLをコピーしました