我有以下代码,可以使用Jinja创建一个字符串
from jinja2 import Template
jT = Template('"text": {{text}}, "peripherals": {{peripherals}}')
params = {'text': 'some_text', 'peripherals': 'mouse'}
jT.render(**params)
结果输出为:
'"text": some_text, "peripherals": mouse'
有没有一种方法可以用引号将替换的值括起来,如下所示:
'"text": "hello", "peripherals": "mouse"'
除了编辑现有的jinja和使用{{text|tojson}}之外,Python中是否有一种方法/函数可以自动将每个替换的值括在引号中?
发布于 2020-07-09 12:36:12
如果Jinja包没有内置的工具自动将每个变量替换为字符串,那么我认为这将是正确的方法:
import re
from jinja2 import Template
template = '{"text": {{text}}, "peripherals": {{peripherals}}}'
# Use regular expressions to identify the variables
template = re.sub(r"({{)(\w*)(}})", r'"\1\2\3"', template)
jT = Template(template)
params = {'text': 'some_text', 'peripherals': 'mouse'}
print(jT.render(**params))
它只是在模板中搜索变量,并将它们封装在引号中。
发布于 2020-07-09 08:42:19
只需修改您的模板:
from jinja2 import Template
jT = Template('"text": "{{text}}", "peripherals": "{{peripherals}}"')
params = {'text': 'some_text', 'peripherals': 'mouse'}
print(jT.render(**params))
返回:
"text": "some_text", "peripherals": "mouse"
在不修改模板的情况下,使用以下自定义代码:
jT = Template('"text": {{text}}, "peripherals": {{peripherals}}')
params = {'text': 'some_text', 'peripherals': 'mouse'}
j = jT.render(**params)
# Specifically for your example:
print(f'{j.split()[0]} "{j.split()[1][:-1]}", {j.split()[2]} "{j.split()[3]}"')
# More general:
for i in range(len(j.split()) - 1):
if i % 2 == 0:
print(j.split()[i] + ' ', end='')
else:
print('"' + j.split()[i][:-1] + '",', end=' ')
print('"' + j.split()[-1] + '"')
返回:
"text": "some_text", "peripherals": "mouse"
"text": "some_text", "peripherals": "mouse"
如果您需要为多个模板运行它,请将其放在一个函数中:
def render_template(j):
for i in range(len(j.split()) - 1):
if i % 2 == 0:
print(j.split()[i] + ' ', end='')
else:
print('"' + j.split()[i][:-1] + '",', end=' ')
print('"' + j.split()[-1] + '"')
render_template(j)
再次返回:
"text": "some_text", "peripherals": "mouse"
https://stackoverflow.com/questions/62810736
复制相似问题