1

我有 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 文件包含其他“{}”容器......你可以建议做些什么来避免这个问题?

最好的问候,萨沙。

4

3 回答 3

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很容易上手,但是“还有其他产品”!

于 2012-08-12T14:59:44.383 回答
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;
}}

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

于 2012-08-12T15:40:14.460 回答
0

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

我不得不将月份和年份放在 html 中,但 .format 或 % 没有帮助,并且在尝试这些之后看到了问题,想通过使用 {{ 或 { 来转义 { 但 html 代码非常大并且有 500+ '{'人物。

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

body = """<html>
.
.
.
<p>month_year</p>
.
.
.
</html>
"""

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

这对我有用

于 2018-09-07T06:07:56.327 回答