Как использовать переменную для получения атрибутов другой переменной в шаблонах Django
Я пытаюсь заполнить CSS-сетку в шаблоне Django заданными столбцами и строками. Насколько я понимаю, мне нужно сделать что-то вроде "вложенных переменных" в шаблоне Django, чтобы достичь того, что я ищу. Я пробовал это, но это не работает:
{% for parent_row in parent_rows %}
{{ parent_row }}
<div>p1</div>
<div>p2</div>
{% for child_row in children_rows %}
<div> {{ child_row}} </div>
{% for guy in guys %}
<input type=”text” value=”{{guy}}.{{child_row}}”></input>
{% endfor %}
{% endfor %}
{% endfor %}
Ни {{guy}}.{{child_row}}, ни некоторые похожие варианты, которые я пробовал, не работают. Мне удается получить искомый результат, просто написав весь HTML открытым, а затем перебирая каждого парня в отдельных строках, поскольку я могу использовать, например, guy.name для получения нужного значения в каждой строке, но это означает много повторений.
parent_rows может выглядеть, например, так:
“names”, “contact_information”, “hobbies”
children_rows может выглядеть, например, так:
“forename”, “family_name”, “phone_number”, “mail”, “favourite_hobby”
а две записи в парнях будут выглядеть так (обе одинаковые, для простоты иллюстрации):
“forename”: “Mike”
“family_name”: “McMediocre”
“phone_number”: “123”
“mail”: “mike@mediocre.com”
“favourite_hobby”: “tennis”
Я пытаюсь заполнить сетку, чтобы она выглядела следующим образом:
col1 | col2 | col3 |
---|---|---|
имена | p1 | p2 |
forename | Майк | Майк |
имя_семьи | МакМедиокр | МакМедиокр |
контактная_информация | p1 | p2 |
номер_телефона | 123 | 123 |
mike@mediocre.com | mike@mediocre.com | |
hobbies | p1 | p2 |
favourite_hobby | tennis | tennis |
Нашел ответ на свой вопрос здесь.
Принятый ответ (пользовательские фильтры шаблонов) был полезен и в моей ситуации. Я сделал следующее:
Создали каталог templatetags в MyApp
Создал файл customtemplatetag.py в этой директории
.Скопируйте фрагмент из сообщения по ссылке:
from django import template
register = template.Library()
@register.filter def get_obj_attr(obj, attr): return getattr(obj, attr)
Добавил {% load mytemplatetag %} к моему шаблону
.Использовал {{guy|get_obj_attr:child_row}} в шаблоне