string.format()与python中的html文件有问题

时间:2012-08-12 14:48:16

标签: python html string

我有hmtl模板,想在那里添加一些值。 我打算用这样的规则使用sting.format模块:

"Hello {name}! I am {years} years old".format(name = "Bob", years = "25").

所以我写了这样的测试

x = open(source_folder + "template.html", 'r')
  template = x.read()
  template.format(tester = "John")
  studio_html = open(studio_folder + "/" + studio_name + ".html", 'w')
  studio_html.write(template)

文件的开头是:

  {tester}
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1  /DTD/xhtml1-strict.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta ....

该文件的完整版本位于此处 - http://bit.ly/R4zxQ6

我运行脚本,它给了我错误,它告诉html文件包含其他“{}”容器......你可以建议做些什么来避免这个问题?

最好的问候,Sasha。

3 个答案:

答案 0 :(得分:1)

不要使用format - 您最好使用适用于XML / HTML的模板引擎(或者一般只更换文本) - 查看http://wiki.python.org/moin/Templating

您可以使用正则表达式“滚动自己”并选择不太可能出现在HTML中的分隔符字符 - 常用字符{{some_value}} - 但模板引擎会为您处理此问题。

(轻量级替代方案是在http://docs.python.org/library/string.html#template-strings使用string.Template并更改分隔符)

jinja2很容易上手,但“其他产品可用”!

答案 1 :(得分:1)

正如已经提出的那样,真正的模板模块将为您提供最大的灵活性。但是,可以按照您最初的预期进行操作。为此,您可以转义不应用于字符串格式的花括号。例如,您可能想要修改它:

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

这样:

function MM_swapImgRestore() {{ //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}}

当像这样加倍/转义时,格式/ vformat方法将在解析时忽略它们。替换字段应该仍然只有一组括号,例如{tester}

答案 2 :(得分:0)

Python字符串替换应该在这里有所帮助。

我不得不将月份和年份放入html中,但是.format或%并没有帮助,并且在尝试了这些之后发现了问题,想到了通过使用{{或{来转义{,但是html代码很大并且有500多个“ {”个字符。

因此,用字符串'month_year'更新了html,如下所示:

$(function() {
  registerClock();
  setTime();

  $("#startstop").click(function() {
    //alert('change')
  if (stopWatchRunning == false) {
      startTime = new Date();
      stopWatchRunning = true;
    } else {
      stopWatchRunning = false;
    }
  });
});

body = body.replace('month_year',datetime.date.today()。strftime(“%B%Y”))

这对我有用