从JavaScript传递尺寸参数到Django后端的问题
我在把“size”这个参数从我的JavaScript函数传到Django后台时遇到了一些问题。下面是我Django视图中的相关代码:
def get_product(request, slug):
try:
product = Product.objects.get(slug=slug)
if request.GET.get('size'):
size = request.GET.get('size')
print(size)
return render(request, "core/product_detail.html")
except Exception as e:
print(e)
这是我的JavaScript函数:
function get_correct_price(size) {
console.log(size);
window.location.href = window.location.pathname + `?size=${size}`;
}
在我的HTML模板中,我用size参数调用了这个JavaScript函数:
<button onclick="get_correct_price('{{ s.name }}')">{{ s.name }}</button>
但是,当我点击按钮时,size参数似乎没有传到后台。我确认了JavaScript函数确实被调用了,而且size参数在控制台中也正确打印出来了。
你能帮我找出为什么size参数没有在后台接收到吗?任何建议或见解都非常感谢!谢谢!
urls.py文件:
path("products/",product_list_view,name="product_list"),
path("product/<pid>/",product_detail_view,name="product_detail"),
path("product/<slug>/",get_product,name="product_detail"),
在我的models.py文件中:
class Size(models.Model):
name=models.CharField(max_length=100)
code= models.CharField(max_length=50,blank=True,null=True)
price = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
def __str__(self):
return self.name
class Product(models.Model):
pid=ShortUUIDField(length=10,max_length=100,prefix="prd",alphabet="abcdef")
user=models.ForeignKey(CustomUser, on_delete=models.SET_NULL ,null=True)
cagtegory=models.ForeignKey(Category, on_delete=models.SET_NULL ,null=True,related_name="category")
vendor=models.ForeignKey(Vendor, on_delete=models.SET_NULL,null=True,related_name="product")
color=models.ManyToManyField(Color,blank=True)
size=models.ManyToManyField(Size,blank=True)
title=models.CharField(max_length=100,default="Apple")
image=models.ImageField(upload_to=user_directory_path,default="product.jpg")
description=RichTextUploadingField(null=True, blank=True,default="This is a product")
price = models.DecimalField(max_digits=10, decimal_places=2, default=1.99)
old_price = models.DecimalField(max_digits=10, decimal_places=2, default=2.99)
specifications=RichTextUploadingField(null=True, blank=True)
tags=TaggableManager(blank=True)
product_status=models.CharField(choices=STATUS, max_length=10,default="In_review")
status=models.BooleanField(default=True)
in_stock=models.BooleanField(default=True)
featured=models.BooleanField(default=False)
digital=models.BooleanField(default=False)
sku=ShortUUIDField(length=10,max_length=100,prefix="sku",alphabet="abcdef")
date=models.DateTimeField(auto_now_add=True)
updated=models.DateTimeField(null=True,blank=True)
class Meta:
verbose_name_plural="Products"
def product_image(self):
return mark_safe('<img src="%s" width="50" height="50"/>'%(self.image.url))
def __str__(self):
return self.title
def get_percentage(self):
new_price=((self.old_price-self.price)/self.old_price)*100
return new_price
简单来说:
我只想要从这个网址 http://127.0.0.1:8000/product/prdeeffeafaec/?size=15inch
中打印出 15inch
这个值。
1 个回答
1
确保你的网址名称是独一无二的。
设置网址参数,格式如下。
path("products/",product_list_view,name="product_list"),
path("product/<int:pid>/",product_detail_view,name="product_detail"),
path("product/<slug:slug>/",get_product,name="get_product")
制作一个错误页面模板,并在出现异常时显示这个页面。
def get_product(request, slug):
try:
product = Product.objects.get(slug=slug)
if request.GET.get('size'):
size = request.GET.get('size')
print(size)
return render(request, "core/product_detail.html")
except Exception as e:
print(e)
return render(request, "core/error_page.html")
- 显然,你的模型里没有叫做 slug 的字段。所以下面的代码是无法工作的。
而且
print(size)
也不会输出。这是因为下面的代码行没有执行,导致错误。
product = Product.objects.get(slug=slug)
你只能通过模型中的字段值来获取对象。 像下面这样。
product = Product.objects.get(title="product_title")
#or
product = Product.objects.get(id=4)