2014-10-20 106 views
0

我很难让“标记”显示出来。我不知道如何正确使用.format()在字符串内显示标记。在HTML中使用Python变量/ .format()

变量是否需要位于字符串中的特定位置?试图第一次掌握这一点。对不起,如果我问基本问题。

得到:""".format(marker) KeyError: 'font-family'。不确定问题出在哪里。

marker = "AUniqueMarker"  


# Create the body of the message (a plain-text and an HTML version). 
text = "This is a test message.\nText and html." 
html = """\ 
<html xmlns:v="urn:schemas-microsoft-com:vml" 
xmlns:o="urn:schemas-microsoft-com:office:office" 
xmlns:w="urn:schemas-microsoft-com:office:word" 
xmlns:x="urn:schemas-microsoft-com:office:excel" 
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" 
xmlns="http://www.w3.org/TR/REC-html40"> 

<head> 
<meta http-equiv=Content-Type content="text/html; charset=windows-1252"> 
<meta name=ProgId content=Word.Document> 
<meta name=Generator content="Microsoft Word 15"> 
<meta name=Originator content="Microsoft Word 15"> 
<link rel=File-List href="Law_files/filelist.xml"> 
<!--[if gte mso 9]><xml> 

# (...) 

--> 
</style> 
<!--[if gte mso 10]> 
<style> 
/* Style Definitions */ 
table.MsoNormalTable 
    {mso-style-name:"Table Normal"; 
    mso-tstyle-rowband-size:0; 
    mso-tstyle-colband-size:0; 
    mso-style-noshow:yes; 
    mso-style-priority:99; 
    mso-style-parent:""; 
    mso-padding-alt:0in 5.4pt 0in 5.4pt; 
    mso-para-margin:0in; 
    mso-para-margin-bottom:.0001pt; 
    mso-pagination:widow-orphan; 
    font-size:10.0pt; 
    font-family:"Calibri","sans-serif"; 
    mso-ascii-font-family:Calibri; 
    mso-ascii-theme-font:minor-latin; 
    mso-hansi-font-family:Calibri; 
    mso-hansi-theme-font:minor-latin;} 
</style> 
<![endif]--><!--[if gte mso 9]><xml> 
<o:shapedefaults v:ext="edit" spidmax="1026"/> 
</xml><![endif]--><!--[if gte mso 9]><xml> 
<o:shapelayout v:ext="edit"> 
    <o:idmap v:ext="edit" data="1"/> 
</o:shapelayout></xml><![endif]--> 
</head> 

<body lang=EN-US style='tab-interval:.5in'> 

{marker} 
</body> 

</html> 
""".format(marker=marker) 
+0

从[文件](HTTPS ://docs.python.org/2/library/string.html#format-string-syntax):如果你需要在文本文本中包含一个大括号字符,它可以通过加倍来转义:'{{'和' }}'。 – 2014-10-20 13:51:55

回答

2

你需要逃避串在其他大括号({})的存在,否则该字符串将被format被误解。

你必须重复字符来逃避它们。在你正在呼吁format串,行

{mso-style-name:"Table Normal"; 

改变

{{mso-style-name:"Table Normal"; 

同样地,对于右括号。

+0

非常感谢。它做了诡计。必须逃避HTML中的所有大括号。感谢您的快速响应。认为这需要一周的时间才能收回任何东西! – Cesario 2014-10-20 17:08:34

1

您必须将字符串中的{}加倍,否则format将尝试解释大括号之间的文本。

您可以使用替代来做到这一点:
html = """\ 
your html code 
""".replace("{", "{{").replace("}", "}}").format(marker=marker) 

编辑:replace将改造成{marker}{{marker}},这样就不会被format解释...

+0

谢谢你,主要想法在那里,它帮助解决问题:) – Cesario 2014-10-20 17:09:43