Maison > Questions et réponses > le corps du texte
J'utilise Vue et Django pour ce projet, mais lorsque j'exécute mon code, j'obtiens toujours cette erreur
"Failed to load resource: the server responded with a status of 500 (Internal Server Error) 127.0.0.1:8000/api/v1/products/winter/yellow-jacket-with-no-zipper:1"
J'ai continué à recharger et à attendre 30 minutes que cette erreur disparaisse, mais elle a continué à arriver. Je ne sais pas s'il y a un problème avec mon javascript car j'exécute le projet vue sans aucune erreur.
C'est le code qui, à mon avis, pose problème.
Backend :
Module urls.py dans le package du produit :
from django.urls import path, include from product import views urlpatterns = [ path('latest-products/', views.LatestProductsList.as_view()), path('products/<slug:category_slug>/<slug:product_slug>', views.ProductDetail.as_view()), ]
Front-end :
Script Product.vue :
<template> <div class="page-product"> <div class="columns is-multiline"> <div class="column is-9"> <figure class="image mb-6"> <img v-bind:src="product.get_image"> </figure> <h1 class="title">{{ product.name }}</h1> <p>{{ product.description }}</p> </div> <div class="column is-3"> <h2 class="subtitle">Information</h2> <p>Price: <strong>{{ product.price }}</strong></p> <div class="field has-addons mt-6"> <div class="control"> <input type="number" class="input" min="1" v-model="quantity"> </div> <div class="control"> <a class="button is-dark">Add to Carts</a> </div> </div> </div> </div> </div> </template> <script> import axios from 'axios' export default { name: 'Product', data() { return { product: {}, quantity: 1 } }, mounted() { this.getProduct() }, methods: { getProduct() { const category_slug = this.$route.params.category_slug const product_slug = this.$route.params.product_slug axios .get(`/api/v1/products/${category_slug}/${product_slug}`) .then(response => { this.product = response.data }) .catch(error => { console.log("error") }) } } } </script>
Éditeur :
Après quelques modifications, je pense que le problème est causé par le module views.py dans le package du produit
from django.http import Http404 from rest_framework.views import APIView from rest_framework.response import Response from .models import Product from .serializers import ProductSerializer class LatestProductsList(APIView): def get(self, request, format=None): products = Product.objects.all()[0:4] serializer = ProductSerializer(products, many=True) return Response(serializer.data) #I think its this line of code class ProductDetail(APIView): def get_object(self, category_slug, product_slug): try: return Product.objects.filter(category_slug=category_slug).get(slug=product_slug) except Product.DoesNotExist: raise Http404 def get(self, request, category_slug, product_slug, format=None): product = self.get_object(category_slug, product_slug) serializer = ProductSerializer(product) return Response(serializer.data)
P粉1781328282024-02-22 09:31:57
Après avoir modifié le code, j'ai trouvé que j'avais raison. Le problème vient du module views.py dans le package du produit. Cela peut être vu dans la fonction get_object de la classe ProductDetail.
Texte original :
class ProductDetail(APIView): def get_object(self, category_slug, product_slug): try: return Product.objects.filter(category_slug=category_slug).get(slug=product_slug) except Product.DoesNotExist: raise Http404
Le problème est que je dois ajouter un autre trait de soulignement/trait de soulignement (cette chose : _) lors de la définition du slug de catégorie, donc
category_slug=category_slug
est devenu
category__slug=category_slug
Nouvelle version :
class ProductDetail(APIView): def get_object(self, category_slug, product_slug): try: return Product.objects.filter(category__slug=category_slug).get(slug=product_slug) except Product.DoesNotExist: raise Http404