2017-07-24 55 views
0

我试图使用函数比较表单头和数据的键。如果键不相似,则此功能会添加一个空字段。在模板中使用函数(Django/Python)

它完美罚款,我views.py:

#Entries define all the datas taken from the fobi forms. 

headers = json.loads(entries{0}.saved_data) 
headers = headers.items() 

for key, value in headers: 
    for data in entries: 
     data = json.loads(data.saved_data) 

     formatted[value] = data.get(key, '') 
     print(entries) 


formatted = formatted.items() 

然后我通过格式化成的背景和我的模板我所做的:

<tr> 

      {% for key, valeur in headers %} 
      <th> 
      {{ key }} 
      </th> 
      {% endfor %} 
      </tr> 


      </thead> 
      <tbody> 

       <tr> 

       {% for key, valor in headers %} 
       {% for cle, valeur in formatted %} 


       {%if cle == valor%} 

       <td> {{valeur}}</td> 

       {% endif %}          
       {% endfor %} 
       {% endfor %} 

       </tr>       
      </tbody> 

结果是完美的,如每标题与数据对齐。如果有一些数据缺失,如图片,这个列中就有一个空白的区域。 enter image description here

我只通过我的循环打印了一个表单(最后从格式化字典中保存)。我想打印所有的表格。但在views.py中似乎是不可能的。

我如何管理它到模板中?

谢谢你的回答!

BR,Karro。

回答

0

我找到了解决方案。

我创建dictionnaries的列表:

formattedList = [] 

然后,我改变我最初的循环才能让每一个dictionnary列表设置:

for entry in entries: 
    formatted = {} 
    for key, value in headers: 

     data = json.loads(entry.saved_data) 

     formatted[value] = data.get(key, '') 

    formatted = formatted.items() 
    **formattedList.append(formatted)** 

最后,我改变了这些行我的模板文件:

<tbody> 
       **{%for element in formattedList%}**     
       <tr> 

       {% for key, valor in headers %} 
       **{% for cle, valeur in element %}** 

       {%if cle == valor%} 

       <td> {{valeur}}</td> 

       {% endif %}         
       {% endfor %} 
       {% endfor %} 

       </tr>   
       {% endfor %}    
      </tbody> 

一切工作正常!

我收到了我的所有结果!

enter image description here