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

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

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

Jinja2は、Python用のテンプレートエンジンです。テンプレートファイルの読込や文字列の埋込、分岐/ループの制御文のサポートなどの機能を持ちます。HTMLやXML生成によく使用されますが、どのような文書でも生成することが可能です。

HTML

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

Q&A

解決済

1回答

4984閲覧

jinja2で改行の制御

kiritsukiR

総合スコア22

Jinja2

Jinja2は、Python用のテンプレートエンジンです。テンプレートファイルの読込や文字列の埋込、分岐/ループの制御文のサポートなどの機能を持ちます。HTMLやXML生成によく使用されますが、どのような文書でも生成することが可能です。

HTML

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

0グッド

1クリップ

投稿2022/01/06 05:02

目的

jinja2を用いて以下のようなhtmlを生成しようとしています.

expected.html

1<div> 2 aaaa 3 bbbb 4 cccc 5 dddd 6</div>

aaaaddddは固定ですが,bbbbccccは変わります.
そこで,以下のようにテンプレートを作成しました.
インデントが揃うようにblockfilterで挟んでいます.

html

1<div> 2 aaaa 3 {% filter indent(width=2) %} 4 {% block hoge %} 5 {% endblock %} 6 {% endfilter %} 7 dddd 8</div>

html

1{% extends "template.html" %} 2 3{% block hoge %} 4bbbb 5cccc 6{% endblock %}

問題

上記のテンプレートファイルをrenderした結果,以下のように余計な改行が含まれています.

html

1<div> 2 aaaa 3 4 5 bbbb 6 cccc 7 8 9 dddd 10</div>

試したこと

ドキュメントを見ると,フラグを有効にする方法と,-を付与する方法がありました.

フラグを有効にする方法

trim_blockslstrip_blocksの両方を有効にすると,以下のようにインデントが削除されてしまいました.

html

1<div> 2 aaaa 3bbbb 4 cccc 5 dddd 6</div>

trim_blocksのみ有効にすると,以下のようにインデントがずれました.

html

1<div> 2 aaaa 3 bbbb 4 cccc 5 dddd 6</div>

lstrip_blocksのみ有効にすると,空行は削除されませんでした.

html

1<div> 2 aaaa 3 4 5 bbbb 6 cccc 7 8 9 dddd 10</div>

-を付与する方法

trim_blockslstrip_blocksの両方を無効に戻し,テンプレートを書き換えました.
-の付け方を色々と変えてみましたが,いずれの場合も期待した結果を得ることはできませんでした.
以下はそのうちの2例です.

前のみに付与した場合,末尾に空白が残りました.

html

1<div> 2 aaaa 3 {%- filter indent(width=2) %} 4 {%- block hoge %} 5 {%- endblock %} 6 {%- endfilter %} 7 dddd 8</div>

html

1<div> 2 aaaa 3 bbbb 4 cccc 5 6 dddd 7</div>

前後に付与した場合,直後のインデントが削除されてしまいました.

html

1<div> 2 aaaa 3 {%- filter indent(width=2) -%} 4 {%- block hoge -%} 5 {%- endblock -%} 6 {%- endfilter -%} 7 dddd 8</div>

html

1<div> 2 aaaa 3 bbbb 4 cccc 5dddd 6</div>

質問

jinja2で前後のインデントを崩さず,改行を挟まないようにするにはどうすればいいでしょうか?

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

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

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

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

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

guest

回答1

0

自己解決

trim_blocksとlstrip_blocksの双方を有効化し,blockの直前に+を付与することで達成できました.

html

1<div> 2 aaaa 3 {% filter indent(width=2) %} 4 {%+ block hoge %} 5 {% endblock %} 6 {% endfilter %} 7 dddd 8</div>

投稿2022/01/10 12:39

kiritsukiR

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問