Перебор элементов словаря из шаблона Django html

#python #django

#python #django

Вопрос:

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

Пример: допустим, мы создаем наш словарь в def внутри views.py как показано ниже:

 def home_page(request):

    person = {"name": "Saif", "Phone": 111111111}
    context = {"person": person.items}

    return render(request, 'home.html', context)
  

Затем в home.html например, мы можем легко выполнять итерации:

     {% block body %}

      {% for key, value in person %}
        <p>{{ key }}:{{ value }}</p>
      {% endfor %}

    {% endblock %}
  

Я пробовал другие ответы, но все они не сработали, и этот работает для меня.

Спасибо,

Ответ №1:

В вашем примере вы присваиваете функцию (не результат вызова функции) ключу

 >>> person = {"name": "Saif", "Phone": 111111111}
... context = {"person": person.items}

>>> print(context)
{'person': <built-in method items of dict object at 0x109073280>}
  

Вы можете исправить это, вызвав эту функцию:

 person = {"name": "Saif", "Phone": 111111111}
context = {"person": person.items()}

print(context)
{'person': dict_items([('name', 'Saif'), ('Phone', 111111111)])}
  

(^обратите внимание, что мы добавляем () в метод, это означает, что мы вызываем его)

После этого ваш home.html должно работать как есть.

 {% block body %}

  {% for key, value in person %}
    <p>{{ key }}:{{ value }}</p>
  {% endfor %}

{% endblock %}
  

Другое решение

Для большей гибкости и контроля над вашими данными в шаблоне html в будущем рассмотрите возможность размещения вашего person словаря в контексте как есть (без вызова items() ):

 >>> person = {"name": "Saif", "Phone": 111111111}
... context = {"person": person}

>>> print(context)
{'person': {'name': 'Saif', 'Phone': 111111111}}
  

И в шаблоне html теперь вы можете выбрать, как выполнять итерацию по словарю.

По ключу и значению одновременно:

 {% for key, value in person.items() %}
    <p>{{ key }}:{{ value }}</p>
{% endfor %}
  

Или просто по ключу:

 {% for key in person %}
    <p>{{ key }}:{{ person[key] }}</p>
{% endfor %}
  

Комментарии:

1. Это то, что я пробовал раньше, но у меня ничего не получилось.

2. @SaifAlabachi Я обновил свой ответ, пожалуйста, проверьте его. Это должно помочь