前回記事
Djangoでテンプレートにテキストを表示する場合、通常の方法でテキストを貼付けるとソースコードでは改行されているけどHTMLの<br>タグが無いので改行ができていない文がずらーっと表示されます。
例えば、文字列
'abcdefg.......xys\r\nTEST!'
という改行コードが含まれた文字をそのままテンプレートの
{{ set_text }}
に貼付け、ブラウザで見ると
こうなります。
こうしない為には'\r\n'コードをpythonで置き換えてやれば良いや!と単純に考え
texts = 'abcdefg.......xys\r\nTEST!'
texts = texts.replace('\n','<br />')
と単純に置き換え、ブラウザで見ると
はい、こうなります。
どうなってんの?とソースを見ると、ご丁寧にエスケープ処理されてしまいます。
困った!
じゃあどうすんの?って話ですけど、PythonでどうにかしようとせずDjangoの機能を使えばめちゃくちゃ簡単に解決します!
なんと、テンプレートの項目に”| linebreaksbr”と書いてあげるだけ!
{{ set_text | linebreaksbr }}
これで勝手に改行コードが置き換えられます。ブラウザで見ると
ソースを見ると、今度はソースでは改行されていませんが代わりに<br>タグが含まれています。
<p>タグで囲いたい場合は
{{ set_text | linebreaksbr | linebreaks }}
とすると、ブラウザのソースを見るとちゃんと<p>タグが入っています。
メチャメチャ簡単やんっ!という機能ですがなかなか調べるのに難儀しました。
こういう機能は「フィルタ」と呼ばれるそうで、こちら↓のブログが非常に詳しいです。
フィルタは自作も出来るそうですし、逆にHTMLを直接書きたいという場合にはOFFに出来るそうです。
Djangoの便利機能、使いこなせたら本当に自由自在んだろうな。と感じました。