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

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

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

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

Python

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

Q&A

解決済

1回答

3717閲覧

django.utils.datastructures.MultiValueDictKeyError: 'image'

chgrios

総合スコア70

Django

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

Python

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

0グッド

0クリップ

投稿2020/06/17 10:21

Djangoでpost_image.htmlで参照、POSTされたイメージをdisp_image.htmlで表示するプログラムを作成しようとした結果以下のようなエラーがでました。どのように直したら問題が解決しますか?

Traceback (most recent call last): File "/home/yuyonod/anaconda3/envs/mlapi/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/home/yuyonod/anaconda3/envs/mlapi/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "/home/yuyonod/anaconda3/envs/mlapi/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/yuyonod/work/mlapi/hawkowl/hawkowl/views.py", line 22, in dispImage if request.method == 'POST' and request.FILES['image'] and (request.FILES['image'].content_type == "image/png" or request.FILES['image'].content_type == "image/jpeg"): File "/home/yuyonod/anaconda3/envs/mlapi/lib/python3.8/site-packages/django/utils/datastructures.py", line 78, in __getitem__ raise MultiValueDictKeyError(key) django.utils.datastructures.MultiValueDictKeyError: 'image' [17/Jun/2020 10:10:51] "POST /disp_image HTTP/1.1" 500 80966

djangoのviews.py

from django.http import HttpResponse, HttpResponseRedirect from django.views.decorators.csrf import csrf_exempt from django.shortcuts import render from hashlib import md5 def post_image(request): return render(request, 'post_image.html') def dispImage(request): if request.method == 'POST' and request.FILES['image'] and (request.FILES['image'].content_type == "image/png" or request.FILES['image'].content_type == "image/jpeg"): # 画像の拡張子 extension = ".jpg" if request.FILES['image'].content_type == "image/png": extension = ".png" # ファイル名 filename = md5(request.FILES['image'].name.encode('utf-8')).hexdigest() + extension # ファイルパス filepath = 'static/' + filename # 画像データを image へ書き写す image = open(filepath, 'wb') for chunk in request.FILES['image'].chunks(): image.write(chunk) return render(request, 'display_image.html', {'filepath': filepath}) else: return HttpResponseRedirect('/post_image')

post_image.html

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <form action="/disp_image" method='POST' enctype='multipart/form-data'> {% csrf_token %} <input type="file" name='image'> <input type="submit" value='send'> </form> </body> </html>

disp_image.html

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <h2>hoge</h2> <img src="{{filepath}}" alt=""> <h1></h1> </body> </html> コード

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

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

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

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

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

guest

回答1

0

ベストアンサー

request.FILES['image']
ではなく、
request.FILES.get('image')
な気がしますが、いかがでしょうか?

投稿2020/06/19 03:55

llr114

総合スコア203

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問