suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Django und Vue: „Ressource konnte nicht geladen werden: Der Server hat mit dem Status 500 (Interner Serverfehler) geantwortet“ erscheint immer wieder auf meiner Website

Ich verwende Vue und Django für dieses Projekt, aber wenn ich meinen Code ausführe, erhalte ich ständig diese Fehlermeldung

"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"

Ich habe immer wieder neu geladen und 30 Minuten darauf gewartet, dass dieser Fehler verschwindet, aber er kam immer wieder. Ich weiß nicht, ob mit meinem Javascript etwas nicht stimmt, da ich das Vue-Projekt ohne Fehler ausführe.

Das ist der Code, den ich für problematisch halte.

Backend:

urls.py-Modul im Produktpaket:

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()),
]

Frontend:

Product.vue-Skript:

<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>

Herausgeber:

Nach einigen Änderungen denke ich, dass das Problem durch das Modul „views.py“ im Produktpaket verursacht wird

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粉450079266P粉450079266286 Tage vor457

Antworte allen(1)Ich werde antworten

  • P粉178132828

    P粉1781328282024-02-22 09:31:57

    修改代码后,我发现我是对的。问题出在产品包中的views.py模块。可以在 ProductDetail 类中的 get_object 函数中看到。

    原文:

    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

    问题是我在定义类别slug时需要添加另一个下划线/下划线(这个东西:_),所以

    category_slug=category_slug

    变成了

    category__slug=category_slug

    新版本:

    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

    Antwort
    0
  • StornierenAntwort