2016-04-27 50 views
2

这是我的数据样本:如何格式化django模板的数据?

Network Policy 
    Level 1: John Smith 
    Start date: 27 April 
    Start time: 8am 
    end Date: 05 May 
    end time: 8am 
    Level 2: Bob Smith 
    Start date: 27 April 
    Start time: 8am 
    end Date: 05 May 
    end time: 8am 
Server Policy 
    Level 1: Jane Doe 
    Start date: 23 April 
    Start time: 8am 
    end Date: 02 May 
    end time: 8am 
    Level 2: Greg Brad 
    Start date: 23 April 
    Start time: 8am 
    end Date: 02 May 
    end time: 8am 

我需要,我可以把它作为在Django模板这样的格式来安排这些数据。我以为我首先需要嵌套字典,但这不起作用,因为我需要在同一个Key下的多个值。

我是Python的新手,所以如果我错了,请纠正上面的问题。

编辑:

这是尽可能Ive得到,

我有词典>名单,不知道怎么弄的字典虽然进入匹配列表?

### Get all the Polices ### 
dictContext = {} 
for objPolicy in objPolicyData['escalation_policies']: 
    strPolicyName = objPolicy['name'] 
    if strPolicyName.lower().find('test') == -1: 
     lstLevel = [] 
     dictContext[strPolicyName] = lstLevel 
     for objOnCall in objPolicy['on_call']: 
      dictUser = {} 
      lstLevel.append(objOnCall['level']) 
      dictUser['strStartDate'] = getDate(objOnCall['start']) 
      dictUser['strStartTime'] = getTime(objOnCall['start']) 
      dictUser['strEndDate'] = getDate(objOnCall['end']) 
      dictUser['strEndTime'] = getTime(objOnCall['end']) 
      objUser = objOnCall['user'] 
      dictUser['strUsername'] = objUser['name'] 
      dictUser['strUserMobile'] = getUserMobile(objUser['id']) 
      #lstLevel.append(dictUser) 

结果是

{ 
    u'DBA Escalation Policy': [1], 
    u'Server Escalation Policy': [1], 
    u'Network Team Escalation Policy': [1, 2], 
    } 

所以我的下一个步骤是让每个级别

它需要去

Policy1 > Level 1 > level 1 user details | Level 2 > Level 2 user details 
Policy2 > Level 1 > level 1 user details 
Policy3 > Level 1 > level 1 user details | Level 2 > Level 2 user details | Level 3 > Level 3 user details 

下的用户的详细信息,这是我的目标

由于

+1

到目前为止你写了什么代码? – JRodDynamite

+1

它看起来你有各自的政策下两回事(例如,它看起来像一个“开始日期”适用于“约翰·史密斯”,一个适用于“鲍勃·史密斯”等)。也许你需要字典 - >列表 - >字典。在这一点上,我没有看到你的问题与Django的 – SpoonMeiser

+0

@SpoonMeiser去除的Django做什么,我把Django的为多数民众赞成我是在数据发送到。你能告诉我一些我需要的样品吗? – AlexW

回答

1

使用基本类型,您的数据可能转换为这样的事:

policy = { 
    "Network": [ 
     { 
      "Name": "John Smith", 
      "Start_date": "27 April", 
      "Start_time": "8am", 
      "end_Date": "05 May", 
      "end_time": "8am" 
     }, 
     { 
      "Name": "Bob Smith", 
      "Start_date": "27 April", 
      "Start_time": "8am", 
      "end_Date": "05 May", 
      "end_time": "8am" 
     }, 
    ] 
    "Server": [ 
     # ... 
    ] 
} 

在Django模板的话,你可以参考一下,例如:

{% policy.Network.0.name %} 

(水平0因此使用level - 1

而且您还可以遍历每个策略中的级别。

为了从你已有的数据结构的数据结构(由您的代码示例判断),你会做这样的事情:

policy = {} 

# is there a better way here? Are we iterating a dict or a list? 
for policy_data in objPolicyData['escalation_policies']: 
    policy_name = policy_data["name"] 

    # this is a better approach that the find method you employed 
    if "test" in policy_name: 
     continue 

    def sort_key(user_data): 
     return user_data["level"] 

    # just using a list comprehension to map the objects from the current 
    # form to your desired form, making sure we iterate over them in 
    # level order 
    policy[policy_name] = [ 
     { 
      "name": user_data["name"] 
      "start_date": getDate(user_data['start']) 
      "start_time": getTime(user_data['start']) 
      "end_date": getDate(user_data['end']) 
      "end_time": getTime(user_data['end']) 
     } 
     for user_data in sorted(policy_data["on_call"], key=sort_key) 
    ] 

我可能会考虑让代表你的数据对象,提供一个可以与django模板的局限性相结合的接口,而不是使用原语,因为否则的话,最终你的模板和视图代码都会与数据结构紧密耦合。

+0

我如何构建我的代码以创建上面提到的内容?如果该方法更好,我该如何创建对象?谢谢 – AlexW

+0

@AlexW更新了一个代码示例。我不知道你想在你的模板中使用这些数据,所以我不能为你设计对象。 – SpoonMeiser