Как использовать переменную для получения атрибутов другой переменной в шаблонах 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
mail mike@mediocre.com mike@mediocre.com
hobbies p1 p2
favourite_hobby tennis tennis

Нашел ответ на свой вопрос здесь.

Принятый ответ (пользовательские фильтры шаблонов) был полезен и в моей ситуации. Я сделал следующее:

  1. Создали каталог templatetags в MyApp

  2. Создал файл customtemplatetag.py в этой директории

    .
  3. Скопируйте фрагмент из сообщения по ссылке:

    from django import template

    register = template.Library()

    @register.filter def get_obj_attr(obj, attr): return getattr(obj, attr)

  4. Добавил {% load mytemplatetag %} к моему шаблону

    .
  5. Использовал {{guy|get_obj_attr:child_row}} в шаблоне

Вернуться на верх