编码对象的Django模板变量查找

Django template variable lookup of encoded object

本文关键字:变量 查找 Django 对象 编码      更新时间:2023-09-26

当我用查询我的编码对象时

{{ map_settings }}

我得到这样的编码对象:

{  "geometry": {   "type": "Point",   "coordinates": [    50,    4   ]  },  "type": "Feature",  "properties": {  ...

但是,我只需要访问元素"geometry"(在客户端代码中打印整个对象会太大)。

{{map_settings.geometry}}和{{map_settings|safe.geometry}}都不起作用。

有人知道如何只打印这个编码对象的几何元素吗?

***编辑

views.py:中的片段

map_settings['properties'].update(properties)
context['map_settings'] = simplejson.dumps(map_settings, indent=settings.DEBUG)

链接到完整视图.py(Github)

这是一个有点棘手的解决方案,但如果(出于某种原因)您无法更改视图以返回对象而不是json格式的字符串。您可以使用templatetag将其从json字符串转换回对象。

如何创建自定义模板标签。

对于此任务,我们将使用分配标签

同样,简单的标签也可以做到这一点。

因此,在您的应用程序中创建templatetags目录,该目录必须具有__init__.py

在该目录中创建例如json_to_obj.py。现在json_to_obj.py的内容可能看起来像这样。

import json
from django import template
register = template.Library()

@register.assignment_tag
def json_to_obj(json_str):
    return json.loads(json_str)

要在模板中使用json_to_obj模板标签:

{% load json_to_obj %}
{# on the top of your template load the templatetag library #}
...
{% json_to_obj map_settings as map_settings_obj %}
<p>{{ map_settings_obj.geometry }}</p>