2012-09-07 78 views
2

我想为html/javascript模板做一些字符串替换,但是当页面字符串变量在代码中有大括号时,出现“ValueError:unsupported格式字符'}'(0x7d)“。如果我没有任何字符串替换,一切正常。谢谢阅读!字符串替换 - 不受支持的格式字符'}'

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) 

回答

4

你的“模板”包含字符串% }(在100有后右),和Python是解释,作为一个格式化指令。

%%字符加倍到%%,它就可以工作。

>>> 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 ' 

或者,使用较新的.format() method少容易出现此类问题的格式,虽然在这种特定情况下会得到挂在{ height: 100% }大括号对,所以你的里程很可能会有所不同;你不得不加倍这些(所以{{ height: 100% }})。