#【問題】
ImageField上で受け取ったデータを、画面変遷後(プレビュー画面から戻ってきた時)も選択した画像を保持したいが、画像ファイルだけフィールドに挿入できない。
#【試みたこと】
- 画像データをrequest.FILES['file']で取得し、Base64に直し、utf-8にエンコードしたのち、セッションに保持し、プレビュー上に画像を表示させた。
- デコードしなおし、ImageFieldに代入したが、挿入できず。
#【該当コード】
python
1def d_new_post(request, pk): 2 title = 'New Post' 3 if request.method == 'POST': 4 form = PostForm(request.session.get('form_data')) 5 if request.session.get('file', True): 6 b64 = request.session.get('file') 7 b64 = base64.b64decode(b64) 8 b64 = Image.open(BytesIO(b64)) 9 files = {'file': b64} 10 form = PostForm(request.session.get('form_data'), files) 11 else: 12 if request.session['form_data']: 13 form = PostForm(request.session['form_data']) 14 form = PostForm() 15 return render(request, 'dashboard/post_new.html', {'form': form, 'pk': pk, 'title': title}) 16 17def new_preview(request, pk): 18 title = 'New Post Preview' 19 request.session['form_data'] = request.POST 20 session_form = request.session.get('form_data') 21 if request.FILES: 22 img = request.FILES['file'] 23 b64 = base64.b64encode(img.read()) 24 b64 = b64.decode('utf-8') 25 request.session['file'] = b64 26 if session_form is None: 27 form = PostForm() 28 title = 'New Post' 29 # セッション切れや、セッションが空でURL直接入力したら入力画面にリダイレクト。 30 return redirect('account:d_new_post', pk=request.user.pk) 31 context = { 32 'img': img, 33 'form': PostForm(session_form, request.FILES), 34 'title': 'New Post Preview', 35 } 36 return render(request, 'dashboard/new_preview.html', {'context':context, 'pk':pk}) 37
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。