2016-11-18 54 views
0

API/API/V1 /版本返回的应用程序的所有版本在一个特定的吊舱。返回类型是一个OrderDict。我将它馈送给我的jinja模板以在仪表板上显示它。神社2不遍历我的Python字典(从Redis的读取)

随着服务器数量的增加,我需要缓存我在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'} 
    }" 
    } 

上面dictonary被存储在变量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 %} 

请让我知道如果有什么是不是在上面或以其他方式是否需要任何进一步的信息清晰。

回答

1

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

+0

谢谢@knbk。在问这个问题之前,我只是检查了type(version_details),发现它是字典类型。 现在通过键循环,我看到它的所有值是字符串类型。 –