gpt4 book ai didi

Python:创建一个字典列表,其中键没有引号?

转载 作者:行者123 更新时间:2023-12-01 00:35:50 25 4
gpt4 key购买 nike

我正在使用 visjs 插件在我的页面上创建时间线。时间线代码要求我在列表中给出多个字典,如下所示:

  var items = new vis.DataSet([
{id: 1, content: 'item 1', start: '2013-04-20'},
{id: 2, content: 'item 2', start: '2013-04-14'},
{id: 3, content: 'item 3', start: '2013-04-16', end: '2013-04-19'},
]);

现在,我尝试通过使用 for 循环并将我的字典添加到列表中,为我的索引 View 创建类似的内容,然后将其放入我的上下文中并在我的模板中使用它。我的代码如下所示:

class ItemIndex(SingleTableMixin, FilterView):
model = Item
context_object_name = 'items'
template_name = 'accounting/item/item_index.html'

def get_context_data(self, **kwargs):
items = Item.objects.all()
context = super().get_context_data(**kwargs)

dict_list = []

for item in items:
dict = {
"id": item.pk,
"content": Item (# {item.pk})',
"start": str(item.start), #DateField
"end": str(item.end), #DateField
}
dict_list.append(dict)
context.update({
"dict_list": dict_list,
})
return context

现在我不认为这是最漂亮的解决方案,但我不知道更好的解决方案(也许有人有更好的主意)。

在我的 html 中,我像这样调用 dict_list:

var items = new vis.DataSet(
"{{dict_list}}"
);

我的问题是我返回的列表如下所示:

[{'id': 3, 'content': 'Item (# 3)', 'start': '2020-01-01', 'end': '2020-01-03'}, {'id': 4, 'content': 'Item (# 4)', 'start': '2020-01-01', 'end': 'None'}]

我的问题是键周围的引号“破坏”了整个列表,因此我的时间线无法正确显示。

是否有一个好的解决方案可以以某种方式创建没有键周围引号的字典?

我使用的是 Python 3 和 Django 2.2。

感谢您的帮助!

最佳答案

这里有一个 Python 对象,通过使用 {{ dict_list }},您可以获得 str(..) 的 HTML 转义版本该对象的。您可能最好使用 JSON 作为中间格式。因此,您首先要在上下文中对对象进行 JSON 编码:

context.update(
dict_list=<b>json.dumps(</b>dict_list<b>)</b>,
)

在模板端,您可以解析回 JSON。您应该将 dict_list 变量标记为安全,以确保它不会进行 HTML 转义:

var items = new vis.DataSet(
<b>JSON.parse(</b>'{{ dict_list<b>|safe</b> }}'<b>)</b>
);

关于Python:创建一个字典列表,其中键没有引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57773195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com