gpt4 book ai didi

python - Jinja 2 不会迭代我的 python 字典(从 Redis 读取)

转载 作者:可可西里 更新时间:2023-11-01 11:18:33 25 4
gpt4 key购买 nike

API/api/v1/version 返回特定 pod 中应用程序的所有版本。返回类型是 OrderDict。我将它提供给我的 jinja 模板以在仪表板上显示相同的内容。

随着服务器数量的增加,我需要在 Redis 中缓存我的对象。奇怪的是,我的 jinja2 模板没有显示我从 redis 读取的字典。

我发现的唯一区别是键前面即将出现的 'u',这在我从 redis 获得的字典中是没有的。

例子:

来自 Redis 的字典

{'pod1':
"{'server1': {'status': 'failed', 'comment': 'Server is offline.'},
'server2': {'status': 'failed', 'comment': 'Exception ConnectTimeout while extracting response'}",
'pod2':
"{'server-3':{'status':'success', 'build_number': '74', 'githash': '601a62162ad3cdd2e13f0728f1a9979281acefd4', 'timestamp': '2016-11-17 16:00:01', 'version': '1.0.74-RELEASE', 'tagname': 'release_2016_11_17'}
}"
}

Django 生成的字典(缓存之前)

{u'pod1':
"{'server1': {'status': 'failed', 'comment': 'Server is offline.'},
'server2': {'status': 'failed', 'comment': 'Exception ConnectTimeout while extracting response'}",
u'pod2':
"{'server-3':{'status':'success', 'build_number': '74', 'githash': '601a62162ad3cdd2e13f0728f1a9979281acefd4', 'timestamp': '2016-11-17 16:00:01', 'version': '1.0.74-RELEASE', 'tagname': 'release_2016_11_17'}
}"
}

上述字典存储在变量version_details中。下面的行呈现它

return render_to_response("version.html", {'pods': version_details, 'teams': APP_DETAILS.keys()})

下面的代码片段是jinja2的实现

<div class="uk-container uk-container-center uk-margin-top">

<ul class="uk-grid" data-uk-grid-margin>
{% for pod, details in pods.iteritems %}
{% for server,server_details in details.iteritems %}
<li class="uk-width-1-3">
<div class="uk-panel uk-panel-box uk-width-large-1-1">
{% if server_details.status == 'success' %}
<div class="uk-panel-badge uk-badge uk-badge-success">{{ server_details.status }}</div>
{% else %}
<div class="uk-panel-badge uk-badge uk-badge-danger">{{ server_details.status }}</div>
{% endif %}
<h1 class="uk-panel-title uk-text-bold uk-text-nowrap"><i class="uk-icon-server"></i>{{ server }}</h1>
{% if server_details.status == "failed" %}
<p class="uk-text-break"><b>Comment:</b> {{ server_details.comment }}</p>
{% else %}
<p class="uk-text-break"><b>Jenkins Pipeline Number:</b> {{ server_details.build_number }}</p>
<p class="uk-text-break"><b>Githash:</b> {{ server_details.githash }}</p>
<p class="uk-text-break"><b>Timestamp:</b> {{ server_details.timestamp }}</p>
<p class="uk-text-break"><b>Version:</b> {{ server_details.version }}</p>
<p class="uk-text-break"><b>GitTag:</b> {{ server_details.tagname }}</p>
{% endif %}
</div>
</li>
{% endfor %}
{% endfor %}

如果以上内容有任何不清楚的地方,或者如果需要任何进一步的信息,请告诉我。

最佳答案

Jinja2 无法遍历您的details,因为它实际上不是一个字典,而是一个字符串。您需要反序列化字符串,以便迭代各个键/值对。

关于python - Jinja 2 不会迭代我的 python 字典(从 Redis 读取),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40675037/

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