Добрый день,
У меня есть поле ниже 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)}
Спасибо