我有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。
答案 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”))
这对我有用