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

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

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

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

1388閲覧

プレビュー経由の画像ファイルの受け渡し。(django)

DaichiKudo

総合スコア7

Django

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/05/01 05:28

##【行いたいこと】
投稿プレビュー画面(モデルに保存前、フォームからテンプレートに渡している状態から)で画像を表示
「戻る」を押した際に、フォームの中にファイルを保持した状態で、編集ページに戻る
「投稿」を押した際に、モデルに画像ファイルを保存

##【問題】
モデルに保存していない状態で、フォーム上の画像を表示ができていない。
form.field.as_hiddenとして、「戻る」「投稿」を押した際にデータの送信を行っているおり、as_hiddenでは画像ファイルの送信が行えない。(この点は、自分の解釈と、ネット上の情報を参照しました。)

##【試したこと】
下記のようにして、画像の表示を試みましたが、前者はsrc="filename.jpg"
のようになり、後者はsrc="unknown"となりました。<img src="{{ form.file.value }}"> <img src="{{ form.file.url }}">アドミンサイトからの画像の登録、プレビューページ上でas_hiddenを外し、プレビューページ上で再度画像の登録を行った場合は、どちらも問題なく動作しています。

##【該当コード】
forms.py

python:forms.py

1class PostForm(forms.ModelForm): 2 class Meta: 3 model = Post 4 fields = ('title', 'text', 'file')

models.py

python:models.py

1class Post(models.Model): 2 author = models.ForeignKey(settings.AUTH_USER_MODEL, 3 on_delete=models.CASCADE) 4 file = models.ImageField(upload_to='media',blank=True, null=True) 5 title = models.CharField(max_length=200) 6 text = MarkdownxField('text') 7 created_date = models.DateTimeField(default=timezone.now) 8 published_date = models.DateTimeField(auto_now=True)

views.py 下記は、d_new_postで編集し、new_previewでプレビューし、
戻る場合はPOSTリクエストにてd_new_post、確定した場合、d_post_detailに進みます。

django:views.py

1def d_post_detail(request, pk): 2 title = 'Post Detail' 3 user = request.user 4 if request.method == 'POST': 5 form = PostForm(request.POST) 6 if form.is_valid(): 7 post = form.save(commit=False) 8 post.author = user 9 post.file = request.FILES['file'] 10 post.published_date = timezone.now() 11 post.save() 12 else: 13 post = get_object_or_404(Post, pk=pk) 14 return render(request, 'dashboard/post_detail.html', {'post': post, 'user': user, 'title':title}) 15 16def d_new_post(request, pk): 17 title = 'New Post' 18 if request.method == 'POST': 19 form = PostForm(request.POST, request.FILES) 20 form.file = request.FILES['file'] 21 else: 22 form = PostForm() 23 return render(request, 'dashboard/post_new.html', {'form': form, 'pk': pk, 'title': title}) 24 25 26def new_preview(request, pk): 27 title = 'New Post Preview' 28 form = PostForm(request.POST, request.FILES) 29 form.file = request.FILES['file'] 30 return render(request, 'dashboard/new_preview.html', {'pk': pk, 'form': form, 'title': title})

preview.html

html:preview.html

1 {% if form.file %} 2 <img src="{{ form.file.value }}"> 3 {% endif %} 4 {{ form.text.value | markdown_to_html }} 5 </div> 6 </div> 7 <div class="card-footer"> 8 <form action="{% url 'account:d_new_post' pk %}" method="POST" enctype="multipart/form-data"> 9 {% csrf_token %} 10 {% for field in form %} 11 {{ field.as_hidden }} 12 {% endfor %} 13 <button type='submit' class="btn btn-primary float-left"><b>Back to Edit</b></button> 14 </form> 15 <form action="{% url 'account:d_post_detail' pk %}" method='POST' enctype="multipart/form-data"> 16 {% csrf_token %} 17 {% for field in form %} 18 {{ field.as_hidden }} 19 {% endfor %} 20 <button type='submit' class="btn btn-default float-right"><b> Confirm </b></button> 21 </form>

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問