В Python, как вы делаете замены, если файл шаблона содержит "$"? - PullRequest
0 голосов
/ 09 июля 2019

Я использую Python 3.7 и Django.Я хочу получить строку из шаблона в Python и сделать соответствующие замены следующим образом ...

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"],

Знак доллара обычно используется для замены, и поэтому, возможно, по этой причине мой код выше умирает с ошибкой ...

ValueError: Invalid placeholder in string: line 248, col 31

Кто-нибудь знает, как я могу изменить вышеуказанную строку шаблона, чтобы механизм подстановки игнорировал знак доллара в этой строке?

1 Ответ

0 голосов
/ 09 июля 2019

Три варианта:

1) Следуйте правилам побега https://www.simplifiedpython.net/python-template-class/

  • «$$» - это побег; он заменяется одним «$».
  • «$ identifier» называет замещающий заполнитель, соответствующий ключу сопоставления «идентификатора». По умолчанию «идентификатор» должен произносить Python идентификатор. Первый неидентифицирующий символ после «$» символ завершает эту спецификацию заполнителя.
  • «$ {identifier}» эквивалентно «$ identifier«. Требуется при действительные идентификаторы следуют за заполнителем, но не являются частью заполнителя, такого как «$ {имя существительное} ification».

2) Следуйте моему извращенному обходному пути

В обычном шаблоне django вы можете поместить {{verbatium}} {{end verbatium}} вокруг javascript, но вы используете новую строку шаблона Python. Я думаю, вам придется каким-то образом продезинфицировать вашу строку, а затем заменить ее после замены. Сначала вам нужно загрузить файл в виде строки, а затем преобразовать в шаблон

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 имеют всевозможные конструкции, которые позволяют превратить данные словаря в работающую веб-страницу помимо простых подстановок значений

...