2012-09-07 112 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% }})。