1. 程式人生 > >Django模板遍歷字典的方法

Django模板遍歷字典的方法

row ext html template model import 不能 web keyerror

使用Python + Django做Web開發時,有時需要在view中傳遞一個字典給模板(template),如何在模板中遍歷字典呢?

下面介紹兩種方法:

views.py代碼如下:

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

1.第一種遍歷方法:

index.html代碼如下:

{% 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代碼如下:

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代碼如下:

<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>

 

Django模板遍歷字典的方法