Skip to content

Jinja2 NativeEnvironment dropping single quotes between elements in template to render #1020

@geauxvirtual

Description

@geauxvirtual

Expected Behavior

>>> from jinja2 import Template
>>> template = Template("'{{ foo }}', '{{ bar }}', '{{ baz }}'")
>>> template.render(foo='foobar', bar='barbaz', baz='bazfoo')
('foobar', 'barbaz', 'bazfoo')

Actual Behavior

>>> from jinja2.nativetypes import NativeEnvironment
>>> e = NativeEnvironment()
>>> t = e.from_string("'{{ foo }}', '{{ bar }}', '{{ baz }}'")
>>> t.render(foo='foobar', bar='barbaz', baz='bazfoo')
'foobar, barbaz, bazfoo'

Your Environment

  • Python version: 2.7.5
  • Jinja version: 2.10, 2.10.1, current master

Trying to find an explanation of the on the above. Tested this in an interpreter to narrow it down to just Jinja2, and nothing else that may be calling it, such as Ansible with jinja2_native set to True.

When not using jinja2_native, we get the expected behavior above that the three substitutions occur with single quotes around each value. When jinja2_native is set to true (in the NativeEnvironment as shown above), the inner single quotes in the string are disregarded, and a single string is returned with the three substitutions.

This also occurs even with additional characters between the single quotes:

>>> e = NativeEnvironment()
>>> t = e.from_string("--foo='{{ foo }}' --bar='{{ bar }}'")
>>> t.render(foo='foobar', bar='barbaz')
u"--foo='foobar --bar=barbaz'"

Any help would be appreciated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions