18910140161

JavaScript-为什么在Django中更新HTML之前必须重新加载两次?-堆栈溢出

顺晟科技

2022-10-19 12:13:06

157

我正在Django上开发一个视频游戏网络商店,目前正在购物车上。

这是系统的基本组件:

  • 一个视频游戏模型,包含视频游戏的基本信息(名称、图像、价格、股票等)

  • 购物车模型中的项,包含一个整数字段(金额)和一个一对一的视频游戏字段。这样做的目的是建立一个模型,说明特定客户机将视频游戏添加到购物车的次数

  • 访问客户端模型,包含访问者的IP作为ID和购物车模型

    项的多对多字段

型号:

class Videogame(models.Model):
  name = models.CharField(max_length=50, blank=False, unique=True)
  image = models.ImageField(upload_to='products_images/', blank=False)
  category =  models.ManyToManyField(Category)
  description = models.TextField(blank=True)
  stock = models.DecimalField(blank=True, null=True, max_digits=3, decimal_places=0, default=0)
  price = models.DecimalField(blank=False, max_digits=6, decimal_places=2, default=0.00)
  visible = models.BooleanField(blank=False, default=True)
  class Meta:
    verbose_name_plural = 'Videogames'
  def __str__(self):
        return self.name

class ItemInCart(models.Model):
  amount = models.PositiveIntegerField(default=1)
  product = models.OneToOneField(to=Videogame, on_delete=CASCADE)
  id = models.TextField(primary_key=True)
  class Meta:
    verbose_name_plural = 'Items In Cart'
  def __str__(self):
    return self.id

class VisitingClient(models.Model):
  id = models.GenericIPAddressField(primary_key=True)
  amount_of_visits = models.IntegerField(default=1)
  first_visit = models.DateTimeField(auto_now_add=True)
  last_visit = models.DateTimeField(auto_now=True)
  items_in_cart = models.ManyToManyField(ItemInCart)

  def __init__(self,*args,**kwargs):
        super(VisitingClient, self).__init__(*args, **kwargs)
        if self.amount_of_visits is None:
            self.amount_of_visits = self.amount_of_visits
            
  def __str__(self):
        return self.id

现在,在我的目录部分的html中,我有以下内容:

class Videogame(models.Model):
  name = models.CharField(max_length=50, blank=False, unique=True)
  image = models.ImageField(upload_to='products_images/', blank=False)
  category =  models.ManyToManyField(Category)
  description = models.TextField(blank=True)
  stock = models.DecimalField(blank=True, null=True, max_digits=3, decimal_places=0, default=0)
  price = models.DecimalField(blank=False, max_digits=6, decimal_places=2, default=0.00)
  visible = models.BooleanField(blank=False, default=True)
  class Meta:
    verbose_name_plural = 'Videogames'
  def __str__(self):
        return self.name

class ItemInCart(models.Model):
  amount = models.PositiveIntegerField(default=1)
  product = models.OneToOneField(to=Videogame, on_delete=CASCADE)
  id = models.TextField(primary_key=True)
  class Meta:
    verbose_name_plural = 'Items In Cart'
  def __str__(self):
    return self.id

class VisitingClient(models.Model):
  id = models.GenericIPAddressField(primary_key=True)
  amount_of_visits = models.IntegerField(default=1)
  first_visit = models.DateTimeField(auto_now_add=True)
  last_visit = models.DateTimeField(auto_now=True)
  items_in_cart = models.ManyToManyField(ItemInCart)

  def __init__(self,*args,**kwargs):
        super(VisitingClient, self).__init__(*args, **kwargs)
        if self.amount_of_visits is None:
            self.amount_of_visits = self.amount_of_visits
            
  def __str__(self):
        return self.id

如果用户触摸add to cart客户端,则在js中会发生这种情况:

class Videogame(models.Model):
  name = models.CharField(max_length=50, blank=False, unique=True)
  image = models.ImageField(upload_to='products_images/', blank=False)
  category =  models.ManyToManyField(Category)
  description = models.TextField(blank=True)
  stock = models.DecimalField(blank=True, null=True, max_digits=3, decimal_places=0, default=0)
  price = models.DecimalField(blank=False, max_digits=6, decimal_places=2, default=0.00)
  visible = models.BooleanField(blank=False, default=True)
  class Meta:
    verbose_name_plural = 'Videogames'
  def __str__(self):
        return self.name

class ItemInCart(models.Model):
  amount = models.PositiveIntegerField(default=1)
  product = models.OneToOneField(to=Videogame, on_delete=CASCADE)
  id = models.TextField(primary_key=True)
  class Meta:
    verbose_name_plural = 'Items In Cart'
  def __str__(self):
    return self.id

class VisitingClient(models.Model):
  id = models.GenericIPAddressField(primary_key=True)
  amount_of_visits = models.IntegerField(default=1)
  first_visit = models.DateTimeField(auto_now_add=True)
  last_visit = models.DateTimeField(auto_now=True)
  items_in_cart = models.ManyToManyField(ItemInCart)

  def __init__(self,*args,**kwargs):
        super(VisitingClient, self).__init__(*args, **kwargs)
        if self.amount_of_visits is None:
            self.amount_of_visits = self.amount_of_visits
            
  def __str__(self):
        return self.id

这就是我的视图的样子

class Videogame(models.Model):
  name = models.CharField(max_length=50, blank=False, unique=True)
  image = models.ImageField(upload_to='products_images/', blank=False)
  category =  models.ManyToManyField(Category)
  description = models.TextField(blank=True)
  stock = models.DecimalField(blank=True, null=True, max_digits=3, decimal_places=0, default=0)
  price = models.DecimalField(blank=False, max_digits=6, decimal_places=2, default=0.00)
  visible = models.BooleanField(blank=False, default=True)
  class Meta:
    verbose_name_plural = 'Videogames'
  def __str__(self):
        return self.name

class ItemInCart(models.Model):
  amount = models.PositiveIntegerField(default=1)
  product = models.OneToOneField(to=Videogame, on_delete=CASCADE)
  id = models.TextField(primary_key=True)
  class Meta:
    verbose_name_plural = 'Items In Cart'
  def __str__(self):
    return self.id

class VisitingClient(models.Model):
  id = models.GenericIPAddressField(primary_key=True)
  amount_of_visits = models.IntegerField(default=1)
  first_visit = models.DateTimeField(auto_now_add=True)
  last_visit = models.DateTimeField(auto_now=True)
  items_in_cart = models.ManyToManyField(ItemInCart)

  def __init__(self,*args,**kwargs):
        super(VisitingClient, self).__init__(*args, **kwargs)
        if self.amount_of_visits is None:
            self.amount_of_visits = self.amount_of_visits
            
  def __str__(self):
        return self.id

这里,我基本上为客户机的存在做准备,在必要时创建它,然后等待AJAX发布,然后用Cart中的新项更新客户机对象,并向AJAX发送成功标志,在AJAX中重新加载页面,以便用新项更新HTML。

显然,在项目出现之前,我必须重新加载两次。有事吗?为什么不一次重载就行呢?谢谢!


顺晟科技:

将调用(大概是)函数来刷新页面。

然后声明,一旦有了它,您将再次刷新页面()。

class Videogame(models.Model):
  name = models.CharField(max_length=50, blank=False, unique=True)
  image = models.ImageField(upload_to='products_images/', blank=False)
  category =  models.ManyToManyField(Category)
  description = models.TextField(blank=True)
  stock = models.DecimalField(blank=True, null=True, max_digits=3, decimal_places=0, default=0)
  price = models.DecimalField(blank=False, max_digits=6, decimal_places=2, default=0.00)
  visible = models.BooleanField(blank=False, default=True)
  class Meta:
    verbose_name_plural = 'Videogames'
  def __str__(self):
        return self.name

class ItemInCart(models.Model):
  amount = models.PositiveIntegerField(default=1)
  product = models.OneToOneField(to=Videogame, on_delete=CASCADE)
  id = models.TextField(primary_key=True)
  class Meta:
    verbose_name_plural = 'Items In Cart'
  def __str__(self):
    return self.id

class VisitingClient(models.Model):
  id = models.GenericIPAddressField(primary_key=True)
  amount_of_visits = models.IntegerField(default=1)
  first_visit = models.DateTimeField(auto_now_add=True)
  last_visit = models.DateTimeField(auto_now=True)
  items_in_cart = models.ManyToManyField(ItemInCart)

  def __init__(self,*args,**kwargs):
        super(VisitingClient, self).__init__(*args, **kwargs)
        if self.amount_of_visits is None:
            self.amount_of_visits = self.amount_of_visits
            
  def __str__(self):
        return self.id

因此向服务器调用两个GET请求并“重新加载”两次。

  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航