Using custom placeholder tokens with python string.format()
Context
- python 2.7
string.format()
- alternative approach that allows custom placeholder syntax
Problem
We want to use custom placeholder delimiters with python str.format()
string.format()
is powerful, but no native support for placeholder delimiter modification.
string.format()
uses curly-brace which is very common and and causes Delimiter collision
string.format()
default workaround is to double-up the delimiters, which can be cumbersome.
Solution
We write a custom class that extends native python str.format()
- extend native python
string.Formatter
with custom class
- configure
string.format()
to support arbitrary delimiter placeholder syntax
- permit other enhancements such as custom formatters and filters
Example001: Demo use of a custom ReFormat
class
- we wrote a custom
ReFormat
class that extends python str.format()
# import custom class
import ReFormat
# prepare source data
odata = { "fname" : "Planet",
"lname" : "Earth",
"age" : "4b years",
}
# format output using .render()
# method of custom ReFormat class
#
vout = ReFormat.String("Hello <%fname%> <%lname%>!",odata).render()
print(vout)
Pitfalls
- requires extension class to
str.format()
- not intended as a substitute for full-blown sandbox-compatible templating solution
See also
- alternative approach that solves this problem using
Jinja2
instead of python str.format()
- How can I print literal curly-brace characters in python string and also use .format on it?