Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix "str|format" string formatting to match spec (%s formatting, not {} formatting), also support "str.format" syntax #267

Open
tjsmith-meta opened this issue Sep 26, 2024 · 0 comments

Comments

@tjsmith-meta
Copy link

tjsmith-meta commented Sep 26, 2024

The jinja2 spec alludes to two flavors of format -- str.format and str|format -- that seemingly have / support different string formatting syntaxes.
https://jinja.palletsprojects.com/en/2.10.x/templates/

The str.format syntax appears to support standard {} string formatting (like fmt::format), whereas str|format appears to support % string formatting (like printf). Here's a quick mapping / handy guide as I understand it.

  • jinja2 "hello %"|format("world") -> Python `"hello %" % "world"
  • jinja2 "hello {}".format("world") -> Python "hello {}".format("world")

Here's a template with corresponding Python jinja2 output.

# template; note that the "2 {}" case fails to compile if arg is passed
{{ "1 %s"|format(0) }}
{{ "2 {}"|format() }}
{{ "3 %s".format(0) }}
{{ "4 {}".format(0) }}

# Python jinja2 output
1 0
2 {}
3 %s
4 0

And a similar template with its corresponding jinja2cpp output.

# template; note that 3/4 are missing because `.format` syntax not currently supported in jinja2cpp
{{ "3 %s"|format(0) }}
{{ "4 {}"|format(0) }}

# jinja2cpp output
3 %s
4 0

From these examples, we can see a couple key differences between jinja2cpp and Python jinja2.

  1. str|format syntax in jinja2cpp behaves like str.format syntax in Python jinja2. That is to say that jinja2cpp uses {} string formatting for str|format when it should instead use %s string formatting (per spec / Python parity).
  2. str.format syntax is not supported in jinja2cpp. This should have the {} string formatting behavior, so existing str|format implementation in jinja2cpp could perhaps largely be reused / repurposed to support this.
@tjsmith-meta tjsmith-meta changed the title Fix "str|format" string formatting to match spec (%s formatting, not {} formatting) Fix "str|format" string formatting to match spec (%s formatting, not {} formatting), also support "str.format' syntax Sep 26, 2024
@tjsmith-meta tjsmith-meta changed the title Fix "str|format" string formatting to match spec (%s formatting, not {} formatting), also support "str.format' syntax Fix "str|format" string formatting to match spec (%s formatting, not {} formatting), also support "str.format" syntax Sep 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant