如何在 jinja2 中设置可选参数

AHB*_*AHB 3 python jinja2 python-2.7

我使用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")
Run Code Online (Sandbox Code Playgroud)

输出:

{"end": "1540995788", "res": "3", "sam": "", "start": "1540390988", "uris": ["abc.com", "", ""]}
Run Code Online (Sandbox Code Playgroud)

T B*_*gis 9

就根本未传递的参数而言(例如sam在您的示例中)

{% if sam %}   
    "sam" : "{{ sam }}"
{% else %}      
{%endif %}
Run Code Online (Sandbox Code Playgroud)

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

"uris":
[
    {% for uri in uris %}
    "{{ uri }}"
    {% endfor %}
]
Run Code Online (Sandbox Code Playgroud)

如果没有uri值并且您没有传递列表,那么render.template您可以"uris"以与 类似的方式完全省略标签sam