Django模板遍历字典的方法

使用Python + Django做Web开发时,有时需要在view中传递一个字典给模板(template),如何在模板中遍历字典呢?

下面介绍两种方法:

    views.py代码如下:

  1. dicts = {"key1"1"key2"2"key3"3, }    
  2. return render_to_response("index.html",{"dicts":dicts,},context_instance = RequestContext(request))    
    dicts = {"key1": 1, "key2": 2, "key3": 3, }  
    return render_to_response("index.html",{"dicts":dicts,},context_instance = RequestContext(request))  

1.第一种遍历方法:

 

   index.html代码如下:

  1. {% for key,value in dicts.items %}    
  2.   <tr class="{% cycle 'altrow' '' %}">                
  3.     <td>{{ forloop.counter }}</td>              
  4.     <td>{{ key }}</td>              
  5.     <td>{{ value }}</td>              
  6.   </tr>             
  7. {% endfor %}  
{% for key,value in dicts.items %}  
  <tr class="{% cycle 'altrow' '' %}">              
    <td>{{ forloop.counter }}</td>            
    <td>{{ key }}</td>            
    <td>{{ value }}</td>            
  </tr>           
{% endfor %}

 这种方法遍历字典,简单明了,但由于字典是无序的,  不能满足特定的要求,如:首先输出key2,在输出key1,key3。要做到这点就需要使用第二种方法。


2. 第二种使用自定义过滤器

 

   1):首先自定义过滤器:

      在Django的app包的合适位置创建一个templatetags包,它应该和models.py,
views.py等在同一级,例如:

     polls/  
       models.py  
       templatetags/  
       views.py  

    

      添加两个文件到templatetags包(即该目录下),一个__init__.py文件(来告诉Python这是一个包含Python代码的模块)和一个包含你的自定义的标签/过滤器定义的文件,后者的文件名是你将在后面用来载入标签的名字,例如,如果你的自定义标签或者过滤器在一个叫myfilter.py文件里,你可以在模板里做下面的事情:
     myfilter.py代码如下:

  1. from django import template    
  2.     
  3. register = template.Library()    
  4.     
  5. def key(d,key_name):        
  6.     value = 0        
  7.     try:            
  8.       value = d[key_name]        
  9.    except KeyError:            
  10.       value = 0        
  11.    return value  
from django import template  
  
register = template.Library()  
  
def key(d,key_name):      
    value = 0      
    try:          
      value = d[key_name]      
   except KeyError:          
      value = 0      
   return value

模板index.html代码如下:

  1. <tr class="altrow">             
  2.   <td>1</td>                
  3.   <td>key2</td>             
  4.   <td>{{ dicts|key:"key2" }}    
  5.   </td>             
  6. </tr>           
  7. <tr>              
  8.   <td>2</td>                
  9.   <td>key1</td>             
  10.   <td>{{ dicts|key:"key1" }}    
  11.   </td>                     
  12. </tr>           
  13. <tr class="altrow">               
  14.   <td>3</td>                
  15.   <td>key3</td>             
  16.   <td>{{ dicts|key:"key3" }}</td>            
  17. </tr>  
<tr class="altrow">           
  <td>1</td>              
  <td>key2</td>           
  <td>{{ dicts|key:"key2" }}  
  </td>           
</tr>         
<tr>            
  <td>2</td>              
  <td>key1</td>           
  <td>{{ dicts|key:"key1" }}  
  </td>                   
</tr>         
<tr class="altrow">             
  <td>3</td>              
  <td>key3</td>           
  <td>{{ dicts|key:"key3" }}</td>          
</tr>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值