Keep undefined variables(保留未定义的变量)
本文介绍了保留未定义的变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我感兴趣的是分多个步骤呈现模板,或者在JJIA2中保留未定义变量的标记。我相信这不仅意味着创建"UnfinedSilent";"类(这样模板就不会在缺少数据时崩溃),而且如果缺少标记,还会保留具有适当变量名的标记。
示例: 假设上下文中包含Name=";Test";,但缺少数量。
赠送以下模板:
<p>{{name}} has {{quantity}}</p>
呈现后,我需要模板变为:
<p>test has {{quantity}}</p>
有人知道这是否可以实现吗?
推荐答案
我也看到了同样的行为。库jinja2schema提供模板所需的变量架构。
我的解决方案的步骤如下:
- 有模板
- 获取架构结构
- 提供一些要填写的数据
- 用原始字符串填充缺失项目的完整de数据
from jinja2 import Template
import jinja2schema
def assign(schema, data, root=''):
'''Returns a corrected data with untouched missing fields
'''
out = {}
for key in schema.keys():
if isinstance(schema[key], (str, jinja2schema.model.Scalar)):
try:
out[key] = data[key]
except:
out[key] = f'{{{{ {root+key} }}}}'
elif isinstance(schema[key], (dict, jinja2schema.model.Dictionary)):
out[key]={}
try:
data[key]
except:
data[key] = {}
out[key] = assign(schema[key], data[key], root+key+'.')
return out
# original template
template_str = '<p>{{name}} has {{quantity}}</p>'
# read schema
schema = jinja2schema.infer(template_str)
# available data
data = {'name':'test'}
# data autocompleted
data_corrected = assign(schema, data)
# render
template = Template(template_str)
print(template.render(data_corrected))
输出为
<p>test has {{ quantity }}</p>
这是预期的结果。
希望它能有所帮助。此解决方案不适用于列表,但我认为可以扩展该解决方案。如果需要,您还可以获取缺少的字段列表。
这篇关于保留未定义的变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:保留未定义的变量
基础教程推荐
猜你喜欢
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
