Documentation of Template says:
$identifier names a substitution placeholder matching a mapping key of "identifier". By default, "identifier" must spell a Python identifier. The first non-identifier character after the $ character terminates this placeholder specification.
While it was true when these lines were written, Python 3 has greatly extended identifier character set, and it no longer matches the set of characters used by Template:
>>> Template('$foo123щъ').substitute(foo=1, foo123=2, foo123щъ=3)
'2щъ'
I propose clarifying documentation.
Actually extending character set is backward-incompatible, although it won't be if restricted to "${identifier}" syntax. |