#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 Я обновил свой ответ, пожалуйста, проверьте его. Это должно помочь