这是我的另一个问题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
答案 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 = '''
应该使其不必要,但我必须理解错误。
希望能为您提供所需的产品。