Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Python中,用字符串替换jinja变量的每个实例

在Python中,用字符串替换jinja变量的每个实例
EN

Stack Overflow用户
提问于 2020-07-09 08:36:41
回答 2查看 850关注 0票数 3

我有以下代码,可以使用Jinja创建一个字符串

代码语言:javascript
运行
AI代码解释
复制
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中是否有一种方法/函数可以自动将每个替换的值括在引号中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-09 12:36:12

如果Jinja包没有内置的工具自动将每个变量替换为字符串,那么我认为这将是正确的方法:

代码语言:javascript
运行
AI代码解释
复制
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))

它只是在模板中搜索变量,并将它们封装在引号中。

票数 5
EN

Stack Overflow用户

发布于 2020-07-09 08:42:19

只需修改您的模板:

代码语言:javascript
运行
AI代码解释
复制
from jinja2 import Template

jT = Template('"text": "{{text}}", "peripherals": "{{peripherals}}"')
params = {'text': 'some_text', 'peripherals': 'mouse'}
print(jT.render(**params))

返回:

代码语言:javascript
运行
AI代码解释
复制
"text": "some_text", "peripherals": "mouse"

在不修改模板的情况下,使用以下自定义代码:

代码语言:javascript
运行
AI代码解释
复制
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] + '"')

返回:

代码语言:javascript
运行
AI代码解释
复制
"text": "some_text", "peripherals": "mouse"
"text": "some_text", "peripherals": "mouse"

如果您需要为多个模板运行它,请将其放在一个函数中:

代码语言:javascript
运行
AI代码解释
复制
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)

再次返回:

代码语言:javascript
运行
AI代码解释
复制
"text": "some_text", "peripherals": "mouse"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62810736

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档