Файл Django не отображает входные данные на реальном сайте

В настоящее время я пытаюсь научиться использовать django для создания веб-сайта, но мои входные данные в моделях не отображаются должным образом

'''

from django.db import models

class products(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

class typeWork(models.Model):
    work = models.CharField(max_length = 255)
    hoursWorked = models.IntegerField()
    number_in_stock = models.IntegerField()
    daily_rate = models.FloatField()
    genre = models.ForeignKey(products, on_delete=models.CASCADE)

'''

models.py

'''

from django.urls import path
from . import views

urlpatterns = [
   path('hello/', views.hello, name='hello')
]

''' urls.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import typeWork


def hello(request):
    products2 = {typeWork.objects.all()}
    return render(request, 'index.html', {products2})

views.py немного изменен, так как я возился с ним, чтобы попытаться исправить это. На изображении показан код без изменений и моя первоначальная проблема, возникающая из-за этого кода

views.py

<table class="table">
<thead>
    <tr>
        <th>Work</th>
        <th>Type of Work</th>
        <th>Hours needed</th>
    </tr>
</thead>
<tbody>
    {% for products2 in products%}
        <tr>
            <td>{{products2.work}}</td>
            <td>{{products2.genre}}</td>
            <td>{{products2.hoursWorked}}</td>
        </tr>
    {% endfor %}
    
</tbody>

indes.html также немного изменен, на картинке показан исходный код до того, как я попытался исправить его снова index.html

Актуальная ошибка и что она показывает в настоящее время

Вы можете попробовать передать вашу переменную products2 через так называемый "контекстный словарь".

Обновленная версия views.py: В настоящее время я пытаюсь научиться использовать django для создания веб-сайта, но мои входные данные в моделях не отображаются должным образом

from django.shortcuts import render
from django.http import HttpResponse
from .models import typeWork


def hello(request):
    products2 = typeWork.objects.all()
    context = {"products2": products2}
    return render(request, 'index.html', context)

У вас было некоторое представление о том, как передать эти переменные, когда вы поместили символы {}, но только добавление имен между этими символами передаст набор. Словарь будет означать фигурные скобки + набор пар ключ-значение.

Основная идея заключается в том, что каждый раз, когда вы пытаетесь передать данные в представление, вам нужно будет делать это через словарь. Ключ, который вы используете, будет также использоваться в шаблоне. Заменив ваш код на тот, который я написал, вы будете в порядке, потому что ваш шаблон итерирует через что-то под названием products2.

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