'Why does Jinja2 render the string "on" to boolean True?

I'm using Jinja2 with YAML and have the following structure:

{%- set example = [ (20, "on"), (40, "off")] %}

- name: example_yaml
    loop:
      {%- for value, state in example %}
        - TheNumber: {{ value }}
          TheState: {{ state }}
      {%- endfor %}

When the first loop is rendered, TheNumber is correct with 20, but TheState ends up being True. I've looked through the documentation and have tried adding a string filter like this:

{{ state | string }} 

But that did not work either. I have also Tried switching the string "on" to something else like "StateShouldBeOn" just to test with. With that I get what I expect TheState = "StateShouldBeOn".

My question is, why is it that "on" renders to a boolean value?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source