DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

Djangoの使い方⑧テキストファイルの改行\r\nコードをHTMLの<br>に変換する

前回記事

dreamerdream.hateblo.jp

 

 

Djangoでテンプレートにテキストを表示する場合、通常の方法でテキストを貼付けるとソースコードでは改行されているけどHTMLの<br>タグが無いので改行ができていない文がずらーっと表示されます。

f:id:DreamerDream:20181004102234p:plain

例えば、文字列

'abcdefg.......xys\r\nTEST!'

という改行コードが含まれた文字をそのままテンプレートの

{{ set_text  }}

に貼付け、ブラウザで見ると

f:id:DreamerDream:20181004095659p:plain

 

こうなります。

こうしない為には'\r\n'コードをpythonで置き換えてやれば良いや!と単純に考え

texts = 'abcdefg.......xys\r\nTEST!'
texts = texts.replace('\n','<br />')

と単純に置き換え、ブラウザで見ると

f:id:DreamerDream:20181004095958p:plain

 

はい、こうなります。

どうなってんの?とソースを見ると、ご丁寧にエスケープ処理されてしまいます。

f:id:DreamerDream:20181004100031p:plain

困った!

 

 

じゃあどうすんの?って話ですけど、PythonでどうにかしようとせずDjangoの機能を使えばめちゃくちゃ簡単に解決します!

なんと、テンプレートの項目に”| linebreaksbr”と書いてあげるだけ!

{{ set_text | linebreaksbr }}

これで勝手に改行コードが置き換えられます。ブラウザで見ると

f:id:DreamerDream:20181004100503p:plain

ソースを見ると、今度はソースでは改行されていませんが代わりに<br>タグが含まれています。

f:id:DreamerDream:20181004100540p:plain

 

 

<p>タグで囲いたい場合は

{{ set_text | linebreaksbr | linebreaks }}

とすると、ブラウザのソースを見るとちゃんと<p>タグが入っています。

f:id:DreamerDream:20181004101050p:plain

 

メチャメチャ簡単やんっ!という機能ですがなかなか調べるのに難儀しました。

こういう機能は「フィルタ」と呼ばれるそうで、こちら↓のブログが非常に詳しいです。

Django、よく使うフィルタ - naritoブログ

フィルタは自作も出来るそうですし、逆にHTMLを直接書きたいという場合にはOFFに出来るそうです。

Djangoの便利機能、使いこなせたら本当に自由自在んだろうな。と感じました。

 

 

dreamerdream.hateblo.jp

 

 

https://cdn.profile-image.st-hatena.com/users/DreamerDream/profile.png私、(PONさん (@o_n_pon) | Twitter)を応援してくださるお優しいかたは15円から投げ銭可能ですので↓よりカンパをお願いしますm(_ _)m

kampa.me