Python Jinja2宏空白问题

时间:2016-09-26 21:02:35

标签: python macros whitespace jinja2

这是我的另一个问题Python Jinja2 call to macro results in (undesirable) newline的扩展。

我的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

预期产出:

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个空格”行之前有一个额外的行

谢谢Rags

1 个答案:

答案 0 :(得分:1)

完成答案的编辑。我知道你现在要做什么,我有一个有效的解决方案(我在你的模板中添加了一个x.addAll(list1).addAll(list2);语句)。这是我使用的,代码的所有其他行都没有改变:

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 ''' 移到与{% macro print_car_review(car) %}相同的行上。根据我对文档的理解,设置template_str = '''应该使其不必要,但我必须理解错误。

希望能为您提供所需的产品。