Suppress “None” output as string in Jinja2

后端 未结 5 395
无人共我
无人共我 2020-12-07 17:40

How do I persuade Jinja2 to not print \"None\" when the value is None?

I have a number of entries in a dictionary and I would like to outpu

相关标签:
5条回答
  • 2020-12-07 17:57

    Default filter:

    {{ value|default("", True) }}
    
    0 讨论(0)
  • 2020-12-07 17:58

    Another option is to use the finalize hook on the environment:

    >>> import jinja2
    >>> e = jinja2.Environment()
    >>> e.from_string("{{ this }} / {{ that }}").render(this=0, that=None)
    u'0 / None'
    

    but:

    >>> def my_finalize(thing):
    ...     return thing if thing is not None else ''
    ...
    >>> e = jinja2.Environment(finalize=my_finalize)
    >>> e.from_string("{{ this }} / {{ that }}").render(this=0, that=None)
    u'0 / '
    
    0 讨论(0)
  • 2020-12-07 18:01

    A custom filter can solve the problem. Declare it like this:

    def filter_suppress_none(val):
        if not val is None:
            return val
        else:
            return ''
    

    Install it like this:

    templating_environment.filters['sn'] = filter_suppress_none
    

    Use it like this:

    {{value|sn}}
    
    0 讨论(0)
  • 2020-12-07 18:14

    In new versions of Jinja2 (2.9+):

    {{ value if value }}

    In older versions of Jinja2 (prior to 2.9):

    {{ value if value is not none }} works great.

    if this raises an error about not having an else try using an else ..

    {{ value if value is not none else '' }}

    0 讨论(0)
  • 2020-12-07 18:18

    According to this post from the Pocco Mailing List: https://groups.google.com/d/msg/pocoo-libs/SQ9ubo_Kamw/TadIdab9eN8J

    Armin Ronacher (creater of Jinja2/Flask, etc...) recommends the following "pythonic" snippet:

    {{ variable or 0 }} {{ variable or '' }}

    The notion here being that once again, explicit is preferable to implicit.

    Edit: The selected answer is definitely the correct one. I haven't really come across a situation where a template variable would be either a string or the numeric zero, so the above snippets might help reduce the code noise in the template.

    0 讨论(0)
提交回复
热议问题