下午好,
我有以下 Jinja 字段:
{{ DEVICE_RTR-02:LOOPBACK_SUBNET }}
当这个文件名贯穿渲染时
expected token 'end of print statement', got ':'
所以我将 : 换成了 ++ 然后我得到了
'DEVICE_RTR' is undefined
在我看来,哪个可能将破折号作为函数?
我尝试按照下面的方法转义它,只是忽略了整个字段
{{ 'DEVICE_RTR-02++LOOPBACK_SUBNET' }}
我需要使用我在函数中拆分的分隔符来获取正确的数据。- 是数据的命名方式。
有没有办法转义所有字符但处理其中的数据?或者有谁知道我可以交换什么值来完成这项工作?
背景功能如下,它应该让我知道我在做什么:
field_names = re.findall(r'(?s)(?<={{)(.*?)(?=}})', template.config, flags=re.S)
for i, field in enumerate(field_names):
data = field
data = data.strip()
data = data.lower()
if '|' in data:
data = data.split('|')[0]
field_names[i] = data
field_names = list(set(field_names))
template_data = {}
for name in field_names:
# reset the device_data incase it was altered with the alt name
device_data = Device.objects.get(id=device_id)
if '++' in name:
alt_data = name.split('++')[0]
if alt_data.startswith('device_'):
alt_data = alt_data.split('_')
device_data = Device.objects.get(site_id=device_data.site_id,hostname__icontains=alt_data[1])
alt_field_data = get_field_data(name.split('++')[1])
alt_field_data[name.upper()] = alt_field_data.pop(name.split('++')[1].upper())
template_data = {**template_data, **alt_field_data}
else:
template_data = {**template_data, **get_field_data(name.split('++')[1])}
else:
template_data = {**template_data, **get_field_data(name)}
谢谢