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

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

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

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Q&A

解決済

1回答

7756閲覧

flaskとpythonでweb表示させると改行がなくなってしまう文字列を、改行ありで表示させたい

taboopython

総合スコア40

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

0グッド

0クリップ

投稿2020/01/20 05:49

編集2020/01/20 09:35

次のようなコードでflaskとpythonでweb表示させると改行がなくなってしまう文字列を、改行ありで表示させたいのですがうまくいきません。
対処法がありましたらご教示いただければ幸いです。

<元々のコード>

python

1def hyouji() 2 randomword = ('ac \n1 cd ', 3 'abcd \n2 kbic','kebi') 4 return (str(randomword))

シェルで出力した場合、
ab    ←(ちゃんと改行されている)
cd
abcd
kbic
kebi

と、改行されて出力され、このとおりにwebでも表示したいのですが、
webの表示は 

abcd     ←(この部分が改行されず、まずい)
abcdkbic  ←(この部分が改行されず、まずい)
kebi のようになってしまいます。

次のように Markupの使用を試みているのですが、上記の元々の出力のとおり、改行無しで表示されてしまいます。

python

1def hyouji() 2 randomword = ('ac \n1 cd ', 3 'abcd \n2 kbic','kebi') 4 return Markup(randomword.replace('\r','<br>'))

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

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

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

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

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

quickquip

2020/01/20 23:57

一応確認ですが Markup は from markupsafe import Markup でインポートしたもので合ってますか? return Markup(randomword.replace('\r','<br>')) の行を書いたのはあなた自身ですか?
taboopython

2020/01/21 09:36

コメントありがとうございます。from flask import Markup で実行したもので、コードは、ネットで調べて見ようみ真似で書いてみたものです。ちなみにfrom markupsafe import Markup でやっても改行されませんでした。
guest

回答1

0

ベストアンサー

以下でいかがですか?

構造

app.py └ templates index.html

app.py

python

1# app.py 2from flask import Flask, render_template 3 4app = Flask(__name__) 5 6 7@app.route('/') 8def index(): 9 randomword = ('abcd', 'kbic', 'kebi') 10 return render_template('index.html', 11 randomword=randomword) 12 13 14if __name__ == '__main__': 15 app.run(debug=True) 16

index.html

html

1<!-- index.html --> 2<!DOCTYPE html> 3<html lang="ja"> 4<head> 5 <meta charset="UTF-8"> 6 <title>Title</title> 7</head> 8<body> 9 10 <h1>Flaskの例</h1> 11 <div> 12 {% for n in randomword %} 13 <p>{{ n }}</p> 14 {% endfor %} 15 </div> 16</body> 17</html>

2020/01/21 09:26追記

以下ではいかがですか?

こうしたい、には「1」とか「2」は入っていませんが、randomwordでは定義されているのでそのままにしています。

python

1# app.py 2from flask import Flask, render_template 3 4app = Flask(__name__) 5 6 7@app.route('/') 8def index(): 9 randomword = ('ac \n1 cd ', 10 'abcd \n2 kbic', 'kebi') 11 return render_template('index.html', 12 randomword=randomword) 13 14 15if __name__ == '__main__': 16 app.run(debug=True) 17

html

1<!-- index.html --> 2<!DOCTYPE html> 3<html lang="ja"> 4<head> 5 <meta charset="UTF-8"> 6 <title>Title</title> 7</head> 8<body> 9 10 <h1>Flaskの例</h1> 11 <div> 12 {% for n in randomword %} 13 {% autoescape false %} 14 {{ n | replace("\n", "<br />")}} 15 <br /> 16 {% endautoescape %} 17 {% endfor %} 18 </div> 19</body> 20</html>

投稿2020/01/20 06:42

編集2020/01/21 00:29
FiroProchainezo

総合スコア2401

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

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

taboopython

2020/01/20 06:56

ありがとうございます。まずは改行されて表示されましたが、一文字ごとに改行されてしまいました。 abcd kbic kebi のように表示したかったのですが、 a b c d k b i c k e b i     のように表示されてしまいますね。 webに表示する前に改行を何かしら認識させる方法を、引き続き調べてみようと思います。
FiroProchainezo

2020/01/20 07:46

私が提示したコードをそのまま実行しましたか? それとも改変しましたか? そのまま実行した場合は以下を表示するページが見えると思うのですが、いかがですか? ``` Flaskの例 abcd kbic kebi ``` 元々のコードというのはそのままでは動作しないので、私のコードでは変更されているのは認識されていますか? abcdとkbicとkebiには何が入るのでしょうか?以下でしょうか? ``` abcd='abcd' kbic='kbic' kebi='kebi' ```
taboopython

2020/01/20 09:22 編集

申し訳ございません。こちらの提示条件が誤ってました。 今回改行したいのは、次のように 'abcd' と 'kbic'の間の改行ではなく 次のような文字列内の改行が、web 上では改行されない症状です。 FiroProchainezoさんのご提示コードは、文字列ごとには確かに改行されるのですが、その文字列の中身の改行ができないという内容になります。対応方法がもしおわかりになればご教示いただければ幸いです。 'ab \n1 cd', 'abcd \n2 kbic' を ab cd abcd kbic   のように改行したいのですが、 abcd abcd kbicと表示される状況です。   先ほどまではabcdabcdkbicのような状況でしたので、少し改善いたしました。
taboopython

2020/01/21 09:33

ありがとうございます。 そのままのコードで実行してみましたが、やはりこんな感じで実行されてしまいます。 abcd kbic kebi データの型、もしくは、flaskのescapeの仕組みをもう少し調べて悪戦苦闘してみます。
FiroProchainezo

2020/01/22 02:04

今さらで申し訳無いですが、taboopythonさんのソースを現象の発生するソース全文を提示いただけませんか? 前提条件が違う気がします。
taboopython

2020/01/23 10:32

FiroProchainezoさん申し訳ございません!うまくいきました! こちらの理解が浅くrender先のhtmlの内容を変えていないことにより、正しく表示されていなかったことがわかりました。htmlを正しくrenderした結果、'  ' 内の改行がうまくいったことようやく確認できました!この度は、こちらの理解度に合わせていただき、粘り強くご教示いただき誠にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問