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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1171閲覧

Form入力→画像編集→画像表示を同一ページで行ないたい

kenpi

総合スコア7

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/02/18 10:16

前提・実現したいこと

Macで開発を行なっています。(Python3系、Django)

CreateViewのFormで文字を入力した後、その文字を画像に書き込み、同じページにプレビューとして表示させたいです。

ただ、どうリターンさせれば表示できるのかがわかりません。

自身で調べた結果、Ajaxを使えばできるのかと考えていますが、そもそも画像を生成することへの理解も薄いのでご教授いただければと思い質問します。

教えていただきたいことをまとめると、
・エラーの解決
・画像表示方法
・変なコードの指摘
・今後、書くべき機能(Ajax?)
です。一部でも構いません。
お手数おかけしますが、ご教授、よろしくお願いします。

画像生成は以下を参考にし、文字を縦書きを目指しています。
https://qiita.com/masushin/items/fbeb9018c9b17fe4d244

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

TypeError at /create unsupported operand type(s) for +: 'DeferredAttribute' and 'DeferredAttribute'

multiline_textの引数に"こんにちは"に変更して試した場合↓

KeyError at /create 'setting text direction or font features is not supported without libraqm'

該当のソースコード

以下から変更を加えたいです。上記の参考URLをコピペし、少し変更した形です。

Python

1class WordCreateView(CreateView): 2 model = WordModel 3 form_class = WordForm 4 5 #@require_POST <--必要? 6 def form_valid(self, form): 7 img = Image.new('RGB', (200, 300), (215, 215, 220, 255)) 8 fnt = ImageFont.truetype("./static/fonts/Hannari.otf", 24) 9 t = WordModel.word + WordModel.name # <--formからデータをもらいたい。 10 d = ImageDraw.Draw(img) 11 d.multiline_text((120, 20), t, spacing=24, font=fnt, fill=(0, 0, 0, 255),direction="ttb") 12 img.show() # <--同じ画面に表示させたい(プレビュー的な)

またModel.pyは以下です。

from django.db import models class WordModel(models.Model): word = models.CharField(verbose_name='文言', max_length=255) name = models.CharField(verbose_name="名前", max_length=20)

よろしくお願いします。

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

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

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

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

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

wwbQzhMkhhgEmhU

2019/02/18 14:39

「これをやりたい」でいきなり始めるよりも、「これが出来るようになった」「あれもできるようになった」を積み重ねていって、それらを組み合わせて「こんなことも出来る」と考えてください。 そして、できるはずのことをやってみたつもりなのに、どうしても出来なかったら質問してください。 あなたが単に「やりたいこと」の実現手段をなんでも他人に聞いてしまったら、それはあなたがやったのではなく、あなたが頼んだ別の誰かがやってるだけになります。 問題の解決は最終的にあくまであなたができないといけないのです。 背伸びしすぎた質問をした場合、仮に回答がされたとして、あなたが回答を理解できない可能性があります。 やり方が分からないことを聞く場合は、少なくともそれ以外の全てのことを基本網羅的に知っている状態で聞きましょう。 そして、いくつも分からないことをまとめて聞くようなことは絶対にやめてください。 分からないことが複数ある場合は、1つずつ質問にしてください。 そして、質問はその1つを現象を再現させるのに必要十分なソースコードと一緒にして頂き、これ以上ないくらいに細かく正確に聞いてください。 今回の例で言えば、まずはエラーだけに絞ってください。 そしてソースコードは全部省略せずに貼ってください。 そうしないと誰の環境でも再現するようにはできず、問題のある箇所が含まれているかどうかも分からないので、回答どころではありません。
kenpi

2019/02/18 15:34

ご指摘ありがとうございます。 状況が複雑化しているゆえに焦りが生じたようです。 もう一度整理して質問しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問