首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jinja 2不迭代我的python (从Redis中读取)

Jinja 2不迭代我的python (从Redis中读取)
EN

Stack Overflow用户
提问于 2016-11-18 10:42:19
回答 1查看 234关注 0票数 0

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

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

我发现的唯一不同是键前即将出现的“u”,这在我从redis那里得到的字典中是没有的。

示例:

Redis词典

代码语言:javascript
复制
{'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生成的字典(缓存之前)

代码语言:javascript
复制
{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中。下面的行显示它。

代码语言:javascript
复制
return render_to_response("version.html", {'pods': version_details, 'teams': APP_DETAILS.keys()})

下面的代码片段是jinja2实现

代码语言:javascript
复制
<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 %}

如有任何不清楚之处,或如有任何进一步资料,请告知我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-18 11:00:43

Jinja2不能在您的details上迭代,因为它实际上不是一个dict,它是一个字符串。您需要反序列化字符串,以便可以迭代单个键/值对。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40675037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档