为什么Django项目中没有加载单个产品页面

gijlo24d  于 2023-02-05  发布在  Go
关注(0)|答案(2)|浏览(123)

我正试图使一个电子商务项目,我已经设置了产品页面,但它应该加载一个产品描述页面后goint到API/产品/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

qgzx9mmu

qgzx9mmu1#

首先检查一下你需要的是<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>/'...似乎不正确,请检查它。

2eafrhcq

2eafrhcq2#

声明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)

首先,您需要导入模型。然后,在存储在数据库中的所有这些Product对象中执行get查询。get查询将导致错误(如果未找到匹配对象或找到多个对象)或返回一个对象。
如果要允许查找多个对象,请将get替换为filter lookup。
也坚持你的int:pk

相关问题