我试图访问django模板中名称中有$
的属性。不幸的是,我既不能控制过滤器,也不能控制变量名。
对象的结构如下:
{
"title": "Some title",
"metadata": {
"$price": 9.99,
"$inventory_policy": 1
}
}
我正在尝试访问{{ item.metatadata.$price }}
,但模板生成器因未指定的错误而崩溃。
我已经尝试了python模板的变通方法,但它们也崩溃了:
{{ item.metatadata.$$price }}
{{ item.metatadata.${price} }}
为了将来参考,这是在Klaviyo模板中。
我认为您可以使用自定义过滤器来实现这一点:https://docs.djangoproject.com/fr/4.1/howto/custom-template-tags/
在templatetags.extras.py 中
from django import template
register = template.Library()
@register.filter
def get_value(dictio, key):
return dictio.get(key, '')
以及使用它:
{% load extras %}
{{ item.metatadata|get_value:"$price" }}
永不终止。正是出于这个原因,他们提供了一个未记录的lookup
过滤器。这可能和Lucas Grugru的回答完全一样。
{{ item.metatadata|lookup:"$price" }}
Klaviyo文件中的相关部分为https://help.klaviyo.com/hc/en-us/articles/115005084927-Guide-to-Template-Tags-and-Variable-Syntax#event-变量-4,其中在不相关的示例中使用lookup
滤波器。