Почему страница с одним товаром не загружается в проекте 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>/'...
кажется неправильным, пожалуйста, проверьте его.