У меня есть таблица HTML, которую я хочу заполнить из views.py. Вот мой код:
Index.html
{% for item in pizza %}
<tr id = "{{ item.name }}">
<td>{{ item.status }}</td>
<td>{{ item.name }}</td>
</tr>
{% endfor %}
Просмотры.py
def pizza(request):
pizza_data = [{'name': 'Pepperoni Pizza', 'status': 'Ready'}]
return render(request, "index.html", {'pizza': pizza_data})
Таблица не заполняется, и я не вижу кода ошибки. Это формат в pizza_data? Я удалил другую петлю {% for %}, потому что Лукас прав, что другая петля бесполезна.
Я думаю, я должен сказать, что index.html находится внутри папки с именем templates. Не уверен, что это повлияет, потому что я объявил STATIC_DIR в эту папку.
Причина, по которой pizza_data жестко запрограммирована, заключается в том, что это файл JSON, который мне нужно выяснить, как вставить, но сейчас я хочу посмотреть, может ли цикл {% for %} заполниться, но это не так.
@AbdulNiyasPM извиняется, это должно было быть от def pizza(request). Я написал неправильное имя метода. (Также извиняюсь, что @ не работает?? Я пытался отметить вас, но это не позволило мне)
Есть две ошибки: вы используете одно и то же имя переменной в своем первом цикле {% for pizza in pizza %}, а также пытаетесь получить доступ к словарю с помощью методов QuerySets {% for item in pizza.pizza.all %}.
Я думаю, вы должны переименовать свою переменную. И второй цикл бесполезен, вы помещаете словарь в контекст, поэтому вам просто нужно получить доступ по ключу каждого элемента:
def pizza(request):
pizza_data = [{'name': 'Pepperoni Pizza', 'status': 'Ready'}]
return render(request, "index.html", {'pizzas': pizza_data})
{% for pizza in pizzas %}
<tr id = "{{pizza.name}}">
<td>{{pizza.status}}</td>
<td>{{pizza.name}}</td>
</tr>
{% endfor %}
Привет! Вы правы, что другой цикл for бесполезен, поэтому я его удалил. Почему-то до сих пор не появляется. Это связано с тем, что мой index.html находится внутри папки templates?
Второй цикл не бесполезен, а если бы в словаре было двадцать ключей? Это помогает не обращаться к каждому полю вручную.
@Niko В словаре не двадцать ключей, а всего два. не пытайтесь найти решение несуществующей проблемы
@fireblazer10 Я сделал ошибку в названии пиццы вместо пиццы в контексте представления, я исправляю ее.
Используйте .items для просмотра словаря:
{% for obj in pizza %}
<tr id = "{{ obj.name }}">
{% for key, value in obj.items %}
<td>{{ value }}</td>
{% endfor %}
</tr>
{% endfor %}
Попробуйте этот код, он работает
def pizza(request):
pizza_data = [{'name': 'Pepperoni Pizza', 'status': 'Ready'}]
return render(request, "index.html", {'pizza_data': pizza_data})
<table class = "table ">
<thead>
<th>Item Name</th>
<th>Status</th>
</thead>
<tbody>
{% for item in pizza_data %}
<tr id = "{{ item.name }}">
<td>{{ item.name }}</td>
<td>{{ item.status }}</td>
</tr>
{% endfor %}
</tbody>
</table>
Ваш код, по крайней мере, показывает результат, однако, если вы получаете ошибку «шаблон не существует», у него есть другое решение.
Что вы имеете в виду под {% for item in pizza.pizza.all %} ?