Я недостаточно знаком с django, чтобы знать, есть ли что-то встроенное для этого, но ... вы можете просто определить свою собственную версию getattr
как шаблонный фильтр .По какой-то причине (я предполагаю, потому что это встроенная функция), я не смог просто зарегистрировать встроенную функцию в качестве нового шаблона фильтра.В любом случае, вот как я определил свою версию:
# This is defined in myapp/templatetags/dog_extras.py
from django import template
register = template.Library()
@register.filter
def my_getattr(obj, var):
return getattr(obj, var)
Чтобы использовать ее, вы будете использовать ее так же, как и любые другие два шаблона-фильтра arg:
{{ o|my_getattr:col }}
Вот полный пример (не забывайте о директиве load в верхней части!):
{% load dog_extras %}
<table>
<tbody>
{% for o in objects %}
<tr>
{% for col in columns %}
<td>{{ o|my_getattr:col }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
Если вы никогда раньше не создавали пользовательских шаблонных фильтров, обязательно прочитайте документы!