简体   繁体   English

字符串替换-不支持的格式字符'}'

[英]String substitution - unsupported format character '}'

I'm trying to do some string substitution for html/javascript templating, however when the page string variable has a curly brace in the code, I get the error of "ValueError: unsupported format character '}' (0x7d)". 我正在尝试为html / javascript模板做一些字符串替换,但是,当页面字符串变量在代码中花括号时,出现错误“ ValueError:不支持的格式字符'}'(0x7d)”。 If I don't have any string substitution everything works fine. 如果我没有任何字符串替换,则一切正常。 Thanks for reading! 谢谢阅读!

import webapp2
page = """
<html>
    <style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 0; padding: 0 }
      #map_canvas { height: 100% }
    </style>
    %(say)s
</html>
    """

class MainHandler(webapp2.RequestHandler):
    def write_form(self, say):
        self.response.out.write(page % { "say": say })

    def get(self):
        self.write_form("hello")

app = webapp2.WSGIApplication([('/', MainHandler)],
                              debug=True)

Your 'template' contains the string % } (right after the 100 there), and python is interpreting that as a formatting instruction. 您的“模板”包含字符串% } (紧随其后的100 ),而python会将其解释为格式指令。

Double the % percent characters to %% and it'll work. %百分比字符加倍至%% ,它将起作用。

>>> page = """
... <html>
...     <style type="text/css">
...       html { height: 100%% }
...       body { height: 100%%; margin: 0; padding: 0 }
...       #map_canvas { height: 100%% }
...     </style>
...     %(say)s
... </html>
...     """
>>> page % dict(say='foo')
'\n<html>\n    <style type="text/css">\n      html { height: 100% }\n      body { height: 100%; margin: 0; padding: 0 }\n      #map_canvas { height: 100% }\n    </style>\n    foo\n</html>\n    '

Alternatively, use the newer .format() method for a format less prone to such problems, although in this specific case that'll get hung up on the { height: 100% } curly braces pairs, so your mileage may very well vary; 或者,使用较新的.format()方法处理不太容易出现此类问题的格式,尽管在这种特定情况下,该电话将挂在{ height: 100% }花括号对上,因此您的行距可能会非常不同; you'd have to double those instead (so {{ height: 100% }} ). 您必须将其翻倍(因此{{ height: 100% }} )。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM