Можете ли вы получить доступ к атрибутам переменных в языке шаблонов django с помощью других переменных?
Допустим, у меня есть две переменные - User и Fruitlist. User - это экземпляр модели, а fruitlist - список.
{% for user in users %}
<tr>
<td>{{ user.title }} </td>
<td>{{ user.text }} </td>
{% for fruit in fruitlist %}
<td>{{ user.fruit }} </td>
{% endfor %}
{% endfor %}
Я пытаюсь создать таблицу с помощью приведенного выше кода, где для каждого фрукта в fruitlist создается колонка, и эта колонка заполняется значением атрибута user.fruit (модель пользователя имеет поле для каждого фрукта, которое содержит значение).
Почему приведенный выше код не работает?
Ваш код не работает, потому что атрибут fruit интерпретируется как строка.
Вы можете написать пользовательский фильтр для получения атрибутов в качестве переменных в ваших шаблонах.
# your_app_name/templatetags/your_app_name_tags.py
from django import template
register = template.Library()
@register.filter
def get_attr(obj, attr):
return getattr(obj, attr)
Затем в вашем шаблоне
{% load your_app_name_tags %}
{% for user in users %}
<tr>
<td>{{ user.title }} </td>
<td>{{ user.text }} </td>
{% for fruit in fruitlist %}
<td>{{ user|get_attr:fruit }} </td>
{% endfor %}
{% endfor %}
Заменить:
<td>{{ user.fruit }} </td>
With:
<td>{{ user[fruit] }} </td>
К счастью, здесь вы можете получить доступ к атрибуту, как к ключу словаря.
Хотя, судя по тому, что вы описали, это может быть не совсем правильным решением.
Если список фруктов имеет вид:
fruitlist = ['apple', 'orange', 'banana']
Тогда это должно быть применимое решение