Django: список имен полей и значений модели в шаблоне [дубликат]

Возможные Дубликаты:
Django-перебирать имена полей экземпляра модели и значения в шаблоне

Привет,

Я пытаюсь перечислить поля и соответствующие значения общих моделей Django в шаблонах. Однако я не могу найти встроенное решение для довольно распространенной проблемы. Я довольно близок к решению, но не могу найти выход.

Код view.py :

def showdetails(request, template):
    objects = newivr1_model.objects.all()
    fields = newivr1_model._meta.get_all_field_names()
    return render_to_response(template, {'fields': fields,'objects':objects},
        context_instance=RequestContext(request))

шаблон код:

    <table>                                                                                                                                       
    {% for object in objects %}                                                 
        <tr>                                                                    
            {% for field in fields %}                                           
                <td>                                                            
            <!--    {{ object.field }} /*This line doesn't work*/ -->                                           
                </td>                                                           
            {% endfor %}                                                        
        </tr>                                                                   
    {% endfor %}                                                                
    </table>

что я должен делать в строке шаблона комментария, чтобы получить значение Object.поле?

любые лучшие сухие методы также приветствуются.

2 ответов


к сожалению, вы не можете делать такие поиски в движке шаблонов.

вам придется иметь дело с этим в представлении.

def showdetails(request, template):
    objects = newivr1_model.objects.all()

    for object in objects:
        object.fields = dict((field.name, field.value_to_string(object))
                                            for field in object._meta.fields)

   return render_to_response(template, { 'objects':objects },
                                    context_instance=RequestContext(request))

шаблон

{% for object in objects %}
    <tr>
    {% for field, value in object.fields.iteritems %}
        <td>{{ field }} : {{ value }}</td>
    {% endfor %}
    </tr>
{% endfor %}

вам нужно создать свой собственный фильтр, который будет работать как getattr в python и использовать его в шаблоне:

{{ object|getattribute:field }}

здесь есть описание, как это сделать: выполнение поиска стиля getattr () в шаблоне django

но я не думаю, что это хорошая идея. Insted попробуйте сделать эту логику в представлении, например:

object_values = []
for object in objects
   object_values.append([])
   for field in fields:
       object_values[-1].append(getattr(object, field))
return render_to_response(template, {'object_values': object_values},
        context_instance=RequestContext(request))

и в шаблоне:

<table>                                                                                                                                       
{% for values in object_values %}                                                 
    <tr>                                                                    
        {% for value in values %}                                           
            <td>                                                            
                {{ value }}
            </td>                                                           
        {% endfor %}                                                        
    </tr>                                                                   
{% endfor %}                                                                
</table>

система шаблонов Django не предоставляет много функций (фильтры), потому что вы должны делать всю логику в представлениях. Шаблон должен содержать только данные.