2016-09-26 21 views
2

これは他の質問Python Jinja2 call to macro results in (undesirable) newlineの拡張です。Python Jinja2マクロの空白の問題

私のPythonプログラムが

import jinja2 
template_env = jinja2.Environment(trim_blocks=True, lstrip_blocks=True, autoescape=False, undefined=jinja2.StrictUndefined) 
template_str = ''' 
{% macro print_car_review(car) %} 
    {% if car.get('review') %} 
    {{'Review: %s' % car['review']}} 
    {% endif %} 
{% endmacro %} 
hi there 
car {{car['name']}} reviews: 
{{print_car_review(car)}} 
    2 spaces before me 
End of car details 
''' 
ctx_car_with_reviews = {'car':{'name':'foo', 'desc': 'foo bar', 'review':'good'}} 
ctx_car_without_reviews = {'car':{'name':'foo', 'desc': 'foo bar'}} 
print 'Output for car with reviews:' 
print template_env.from_string(template_str).render(ctx_car_with_reviews) 
print 'Output for car without reviews:' 
print template_env.from_string(template_str).render(ctx_car_without_reviews) 

実際の出力です:

Output for car with reviews: 

hi there 
car foo reviews: 
    Review: good 

    2 spaces before me 
End of car details 
Output for car without reviews: 

hi there 
car foo reviews: 

    2 spaces before me 
End of car details 

予想される出力:

(車1台)先頭に余分な改行が望ましくないさ何
Output for car with reviews: 
hi there 
car foo reviews: 
    Review: good 
    2 spaces before me 
End of car details 
Output for car without reviews: 
hi there 
car foo reviews: 
    2 spaces before me 
End of car details 

と'私の前の2スペース'の前の余分な行

ありがとうラグ

+0

空白を削除したい場合や空白を残したい場合は、 – SumanKalyan

+0

@SumanKalyan私は予想される結果を明確に述べるために質問を修正しました。今すぐ明らかにしたいと思っています。 –

+0

@RagsRachamaduguは、あなたの変更された質問に答えるために私の答えを編集しました。 – coralvanda

答えて

1

完全な編集の編集。私はあなたが今何をしようとしているかを見ています。私は実用的な解決策を持っています(私はあなたのテンプレートに1つのifステートメントを追加しました)。ここで私は変わらずあなたのコードの他のすべての行で、使用したものである:

template_str = '''{% macro print_car_review(car) %} 
    {% if car.get('review') %} 
    {{'Review: %s' % car['review']}} 
    {% endif %} 
{% endmacro %} 
hi there 
car {{car['name']}} reviews: 
{% if 'review' in car %} 
{{print_car_review(car)-}} 
{% endif %} 
    2 spaces before me 
End of car details 
''' 

間隔が、私は正確にあなたがあなたの質問に入れて所望の出力を与え、私の側でそれを実行している正確にどのようにあります。私は自分自身を1つの点で混乱させていると告白します。つまり、最初の行{% macro print_car_review(car) %}template_str = '''と同じ行に移動しなければならないということです。ドキュメントの私の理解に基づいて、trim_blocks=Trueを設定する必要はありませんが、私は間違って理解している必要があります。

うまくいけば、それはあなたが必要とするものを手に入れます。

+0

私の編集した質問を見て、何かがまだ不明な場合は教えてください。 –

+0

あなたの編集した質問と一致するように私の答えを編集しました。 – coralvanda

+0

これは動作しますが、これは回避策です。マクロを作成する私の全ポイントは、呼び出し側がこれを行う必要がないようにすることでした。私はこのマクロを私の場合では10回呼び出さなければならず、各呼び出し元は2行余分になりました。実際、マクロの条件はこの例より複雑です。 JINJAのバグのように見えませんか? trim_blocks = trueであれば、マイナスを使用する必要はありません。空の新しい行は発生しません。 –

関連する問題