2

html/javascript テンプレートの文字列置換を試みていますが、ページ文字列変数のコードに中括弧が含まれていると、「ValueError: サポートされていない書式文字 '}' (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

1 に答える 1

4

'template'には文字列% }(その直後100)が含まれており、Pythonはそれをフォーマット命令として解釈しています。

%パーセント文字を2倍にする%%と、機能します。

>>> 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()方法{ height: 100% }を使用します。ただし、この特定のケースでは、中括弧のペアにハングアップするため、マイレージは大きく異なる可能性があります。代わりにそれらを2倍にする必要があります(そう{{ height: 100% }})。

于 2012-09-07T09:04:28.097 に答える