Динамические страницы Django. Почему мой код не работает?

Я создаю сайт для продажи товаров, и для каждого товара я создаю карточку на основе данных из базы данных. Когда появляется новая карточка, к ней должна автоматически подключаться динамическая страница, основанная на тех же данных из базы данных. Страница создается, но данные из модели не загружаются. Я смотрел руководство по Django, и там показан этот метод с использованием DetailView, откуда я и взял код. Пожалуйста, помогите, я не понимаю, в чем проблема.

My code:

views.py:

class car(DetailView):
    model = inventory
    template_name = 'main/cars.html'
    context_object_name = 'inventory'

urls.py:

urlpatterns = [
    path('inventory/<int:pk>', views.car.as_view(), name='cars'),
]

cats.html:

{% extends 'main/layout.html' %}

{% block main %}
{% for el in invent %}
        <div class="main-card ">
            <img  src = '{{ el.img_1 }}' style="">
            <h3 style="">{{ el.name }}</h3>
            <h4 style="">{{ el.rent }}</h4>
            <button><a href="{% url 'cars' el.id %}">Details</a></button>
        </div>
{% endfor %}
{% endblock %}

models.py:

class inventory(models.Model):
    name = models.CharField('Name', max_length=100)
    type = models.CharField('Type of car', max_length=6)

    img_1 = models.ImageField(upload_to='./sql_imgs')
    img_2 = models.ImageField(upload_to='./sql_imgs')
    img_3 = models.ImageField(upload_to='./sql_imgs')
    img_4 = models.ImageField(upload_to='./sql_imgs')
    img_5 = models.ImageField(upload_to='./sql_imgs')
    img_6 = models.ImageField(upload_to='./sql_imgs')
    img_7 = models.ImageField(upload_to='./sql_imgs')
    img_8 = models.ImageField(upload_to='./sql_imgs')

    MSRP = models.CharField('msrp', max_length=40)
    Purchase = models.CharField('purchase', max_length=40)
    rent = models.CharField('rent', max_length=40)

    specs = models.TextField('specs')

    text = models.TextField('About car')


    def str(self):
        return self.name

    class Meta:
        verbose_name = 'Inventory'
        verbose_name_plural = 'Inventory'

Я прочитал много статей, но не нашел ничего стоящего. Надеюсь, здесь я найду ответ.

Пожалуйста, обновите ваш код следующим образом:

models.py

from django.db import models

class Inventory(models.Model):
    name = models.CharField('Name', max_length=100)
    type = models.CharField('Type of car', max_length=6)
    img_1 = models.ImageField(upload_to='sql_imgs/')
    img_2 = models.ImageField(upload_to='sql_imgs/')
    img_3 = models.ImageField(upload_to='sql_imgs/')
    img_4 = models.ImageField(upload_to='sql_imgs/')
    img_5 = models.ImageField(upload_to='sql_imgs/')
    img_6 = models.ImageField(upload_to='sql_imgs/')
    img_7 = models.ImageField(upload_to='sql_imgs/')
    img_8 = models.ImageField(upload_to='sql_imgs/')
    MSRP = models.CharField('msrp', max_length=40)
    Purchase = models.CharField('purchase', max_length=40)
    rent = models.CharField('rent', max_length=40)
    specs = models.TextField('specs')
    text = models.TextField('About car')

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'Inventory'
        verbose_name_plural = 'Inventories'

views.py

from django.views.generic.detail import DetailView
from .models import Inventory

class CarDetailView(DetailView):
    model = Inventory
    template_name = 'main/cars.html'
    context_object_name = 'inventory'

urls.py

from django.urls import path
from .views import CarDetailView

urlpatterns = [
    path('inventory/<int:pk>/', CarDetailView.as_view(), name='cars'),  # Added trailing slash for best practice
]

cars.html

{% extends 'main/layout.html' %}

{% block main %}
<div class="main-card">
    <img src="{{ inventory.img_1.url }}" alt="{{ inventory.name }}">
    <h3>{{ inventory.name }}</h3>
    <h4>{{ inventory.rent }}</h4>
    <p>{{ inventory.text }}</p>
</div>
{% endblock %}

Пожалуйста, обновите свой код таким образом, и посмотрим, что произойдет дальше, чтобы исправить его по мере необходимости.

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