2013-04-22 101 views
0

我有這樣我如何能匹配Django的模板從字典中的值

mydict['student'] = {'name':'john', 'age':'36'} 

在我的模板字典,我有同學這樣

{{ object.students}} 

我顯示學生名單列表在這樣的表

<table> 
{% for student in object.students %} 
<tr><td>{{student.name}}</td> 
{% endfor%} 

我有複雜的情況,我必須匹配學生的姓名和年齡或什麼曾經鍵在mydict,如果匹配才顯示學生排否則沒有

喜歡這個

if mydict.student.name == student.name && mydict.student.age == student.age 

然後顯示一行

的事情是我可以在可變數字鍵dictoanry所以基本上我正在尋找類似filterwhatever,我通過dictionary和對象,它會返回我的真或假。像

if getResult(mydict['student'], student) 

def getResut(a,b): 
    result_list =[] 
    for key in a: 
     if b[key] icontains a[key]: 
      result_list.append(True) 
     else 
      return False or result_list.append(False) 

它會返回列表的真或列表列表。然後,我會檢查是否都是真的,那麼它將返回true othwise它會返回False

我必須做的一切,在任一templatefilters

+0

任何原因你必須在模板中做所有事情?另外,object.students是Queryset嗎? – 2013-04-22 10:52:36

+0

是的,這是查詢集 – user2294401 2013-04-22 12:02:57

回答

1

你需要寫custom filter

@register.filter(name='show_student') 
def show_student(obj, d): 
    show = True 
    for key, val in d.iteritems(): 
     if hasattr(obj, key): 
      obj_val = getattr(key, obj) 
      if obj_val != val: 
       show = False 
       break 
     else: 
      show = False 
      break 
    return show 

然後在模板中,你可以這樣做:

{% if student|show_student:my_dict %} 
    # show student 
{% endif %} 

PS:你必須小心字典應該包含相同類型的屬性值例如'年齡':這個年齡的'36'是一個字符串,通常它應該是一個整數值