Заполнение таблицы HTML из Django views.py

У меня есть таблица 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 %} заполниться, но это не так.

Что вы имеете в виду под {% for item in pizza.pizza.all %} ?

Abdul Niyas P M 20.02.2023 10:25

@AbdulNiyasPM извиняется, это должно было быть от def pizza(request). Я написал неправильное имя метода. (Также извиняюсь, что @ не работает?? Я пытался отметить вас, но это не позволило мне)

fireblazer10 20.02.2023 10:31

Есть две ошибки: вы используете одно и то же имя переменной в своем первом цикле {% for pizza in pizza %}, а также пытаетесь получить доступ к словарю с помощью методов QuerySets {% for item in pizza.pizza.all %}.

Niko 20.02.2023 10:33
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
0
3
50
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я думаю, вы должны переименовать свою переменную. И второй цикл бесполезен, вы помещаете словарь в контекст, поэтому вам просто нужно получить доступ по ключу каждого элемента:

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?

fireblazer10 20.02.2023 10:55

Второй цикл не бесполезен, а если бы в словаре было двадцать ключей? Это помогает не обращаться к каждому полю вручную.

Niko 20.02.2023 10:58

@Niko В словаре не двадцать ключей, а всего два. не пытайтесь найти решение несуществующей проблемы

Lucas Grugru 20.02.2023 11:55

@fireblazer10 Я сделал ошибку в названии пиццы вместо пиццы в контексте представления, я исправляю ее.

Lucas Grugru 20.02.2023 11:58

Используйте .items для просмотра словаря:

{% for obj in pizza %}
   <tr id = "{{ obj.name }}">
       {% for key, value in obj.items %}
            <td>{{ value }}</td>
       {% endfor %}
   </tr>
{% endfor %}
Ответ принят как подходящий

Попробуйте этот код, он работает

Просмотры.py

def pizza(request):
   pizza_data = [{'name': 'Pepperoni Pizza', 'status': 'Ready'}]
   return render(request, "index.html", {'pizza_data': pizza_data})

HTML-таблица

<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>

Вывод в браузере

Ваш код, по крайней мере, показывает результат, однако, если вы получаете ошибку «шаблон не существует», у него есть другое решение.

Другие вопросы по теме