在Python中,当模板文件包含“ $”时如何进行替换?

时间:2019-07-09 17:00:21

标签: python django python-3.x templates substitution

我正在使用Python 3.7和Django。我想从Python的模板中获取一个字符串,并进行适当的替换,例如...

position: absolute

但是,有一个问题。我的模板包含此

src = Template(filein.read())
# document data
relative_path = article.path.replace(settings.REDDIT_URL_PREFIX, "")
d = {'relative_path': relative_path, 'comment': comment}
# do the substitution
result = src.substitute(d)

美元符号通常用于替换,所以也许由于这个原因,我上面的代码因错误而死...

    ["xpath=//a[@onclick='$(this).parent().submit()']", "xpath:attributes"],

有人知道我如何修改上面的模板行,以使替换机制忽略该行上的美元符号吗?

1 个答案:

答案 0 :(得分:0)

三个选项:

1)遵守转义规则 https://www.simplifiedpython.net/python-template-class/

  • “ $$”是一个转义符;用一个“ $”代替。
  • “ $ identifier”命名与映射键匹配的替换占位符 “标识符”。默认情况下,“标识符”必须拼写Python 标识符。 “ $”之后的第一个非标识符字符 字符终止此占位符规范。
  • “ $ {identifier}”等效于“ $ identifier”。何时需要 有效的标识符字符位于占位符之后,但不属于 占位符,例如“ $ {noun}化”。

2)遵循我扭曲的解决方法

在常规的django模板中,您可以在javascript周围放置{{verbatium}} {{end verbatium}},但是您正在使用Python的新字符串Template。我认为您将必须以某种方式对字符串进行清理,然后在替换后将其反转。您必须先将文件作为字符串加载,然后转换为模板

with open("/path/to/myfile.txt", "rb") as myfile:
   initial = "/n".join(myfile.readlines()[1:])
initial.replace('$(this)',"QXQQQXQ")
src = Template(initial)
result = src.substitute(d)
result.replace("QXQQQXQ", '$(this)')

3)只需使用常规的Django模板

Django模板具有各种结构,可让您将字典数据转化为功能强大的网页,而不仅仅是简单的值替换