2016-11-18 47 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),發現它是字典類型。 現在通過鍵循環,我看到它的所有值是字符串類型。 –