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)
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 :
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
est devenu
Nouvelle version :