Почему страница с одним товаром не загружается в проекте Django

Я пытаюсь сделать проект ecommerce и уже настроил страницу товаров, но она должна загружать страницу описания товара после перехода на страницу api/products/2, пример (2 - это id товара). views.py:

@api_view(['GET'])
def getProduct(request, pk):
    product = None
    for i in products:
        if i['_id'] == pk:
            product = i
            break

    return Response(product)

urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.getRoutes, name="routes"),
    path('products/', views.getProducts, name="products"),
    path('prodcucts/<str:pk>/', views.getProduct, name="product"),
]

Я уже пробовал int:pk вместо str:pk

Вы объявляете products = None, а затем выполняете итерацию с помощью цикла for через products. Это приводит к итерации по None

Попробуйте сделать что-то вроде этого:

from .your_model_module import Product

@api_view(['GET'])
def getProduct(request, pk):
    product = Product.objects.get(id=pk)

    return Response(product)

Сначала вам нужно импортировать вашу модель. Затем вы делаете get запрос внутри всех этих объектов Product, которые хранятся в вашей базе данных. Запрос get приведет к ошибке (если не найден подходящий объект или если найдено несколько объектов) или вернет один объект.

Если вы хотите разрешить поиск нескольких объектов, замените get на filter lookup.

Также придерживайтесь своих int:pk

Сначала проверьте, нужен ли вам <str:pk> или <int:pk>, поскольку "2" и 2 в Python обрабатываются по-разному.

Тогда попробуйте следующее:

@api_view(['GET'])
def getProduct(request, pk):
    product = ""

    for i in products:
        if i['_id'] == pk:
            product = i

    return Response(Product)         

Редактирование:

Имя пути path('prodcucts/<str:pk>/'... кажется неправильным, пожалуйста, проверьте его.

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