2013-04-22 3 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, так что в основном я ищу что-то вроде filter или whatever, которому я передаю dictionary и объект, и он возвращает меня либо true, либо false. что-то вроде

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) 

Это вернет мне список истинных или Flase as. Тогда я проверю, если все верно, то он будет возвращать Правда othwise он вернет ложных

Я должен сделать все, что в любом template или filters

+0

Любая причина, по которой вы «должны сделать все это» в своем шаблоне? Кроме того, 'object.students'' Queryset'? –

+0

да, это набор запросов – user2294401

ответ

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: Вы должны быть осторожны, чтобы словарь значения атрибута того же типа, например. 'age': '36' в этом возрасте является строкой, обычно это должно быть целочисленное значение

Смежные вопросы