如何在Jinja2中设置可选参数

时间:2018-10-31 14:30:55

标签: python python-2.7 jinja2

我已经使用jinja2生成了一个json模板。 json模板已按预期生成。但是,如何使某些参数可选。例如,在下面的模板sam, uri_2 and uri_3中是可选的。当我不在template.render中传递它们的值时,我不希望模板中返回这些参数。当前,这些参数返回空值。

from jinja2 import Template

template = Template(''' 
        {
          "start": "{{start}}",    
          "end": "{{end}}",
          "sam": "{{sam}}",
          "res": "{{res}}",
          "uris": 
          [
             "{{uri_1}}",
             "{{uri_2}}",
             "{{uri_3}}"
          ]
        }   

        ''')

        payload = template.render(start=1560009000, end=1560009000, res=3, uri="abc.com")

输出:

{"end": "1540995788", "res": "3", "sam": "", "start": "1540390988", "uris": ["abc.com", "", ""]}

1 个答案:

答案 0 :(得分:1)

对于完全不传递的参数(例如您的示例中的sam),然后

{% if sam %}   
    "sam" : "{{ sam }}"
{% else %}      
{%endif %}

您可能应该将uri值作为列表传递,然后在模板中执行以下操作:

"uris":
[
    {% for uri in uris %}
    "{{ uri }}"
    {% endfor %}
]

如果没有uri值,并且没有将列表传递给render.template,则可以完全类似于"uris"的方式省略sam标记。 / p>