django 我怎样才能获得已循环的每个项目的名称?

egmofgnx  于 2023-05-23  发布在  Go
关注(0)|答案(1)|浏览(168)

如何从循环Django模型中获取每个项目的名称?我在做一个小项目,但遇到了瓶颈

<div class="row row-cols-1 row-cols-md-4 g-4 mb-4">

  {% for pizza in pizzas %}

    

  <div class="col">
    <div class="card h-100">
      <img src="..." class="card-img-top" alt="...">
      <div class="card-body">
        <h5 class="card-title">**{{pizza.name|title}}**</h5>
        <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
      </div>
      <div class="card-footer d-flex justify-content-between">
        <a href="{% url 'store:custompizza' pk=pizza.pk %}" class="btn btn-primary btn-sm" data-bs-toggle="modal" data-bs-target="#exampleModal">Customize</a>
        
        <!-- Modal -->
        <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
          <div class="modal-dialog modal-dialog-centered">
            <div class="modal-content">
              <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">{{pizza.name|title}}</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
              </div>
              <div class="modal-body">
                <div class="form-check">
                  <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
                  <label class="form-check-label" for="defaultCheck1">
                    Default checkbox
                  </label>
              <div class="modal-footer">
                <button type="button" class="btn btn-danger" data-bs-dismiss="modal">Cancel</button>
                <button type="button" class="btn btn-warning">Add to cart</button>
              </div> 
             </div>
          </div>
        </div>

        <small class="fw-bold">${{pizza.price}}</small>

型号:

class pizza(models.Model):
    name = models.CharField(max_length=40, blank=True)
    price = models.DecimalField(decimal_places=2, max_digits=3)

    def get_absolute_url(self):
        return reverse("store:custompizza", kwargs={"pk": self.pk})

观点:

class PizzaList(ListView):
    model = pizza
    context_object_name = 'pizzas'

因此,我在这个小项目中尝试做的是,对于我循环的每个项目,我希望模态的标题是动态的,并根据我单击的项目进行更改,但它不会更改,而是继续显示第一个项目的名称。

因此,在所有内容都循环并显示在页面上后,我单击一个按钮,在这种情况下,它是自定义按钮,在任何项目上激活模态,并在模态的顶部,我得到存储在数据库中的第一个项目的标题,而不是特别想要显示的。例如:
如果我点击菠萝卡的自定义按钮,它会显示第一个项目的标题,平原。不是我想要的菠萝味。我已经附上了一张照片,以防我没有准确地解释自己

我尝试使用get_absolute_url()和一个pk来获取每个项目的标题,但它不起作用,我一直在获取我点击的任何项目的第一个项目的名称。有人能给我指路吗?我是Django的新手,似乎在这方面遇到了障碍。

tyg4sfes

tyg4sfes1#

问题在于你在HTML中使用模态id的方式。
在这段HTML中:

<div class="card-footer d-flex justify-content-between">
    <a href="{% url 'store:custompizza' pk=pizza.pk %}" class="btn btn-primary btn-sm" data-bs-toggle="modal" data-bs-target="#exampleModal">Customize</a>
    
    <!-- Modal -->
    <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">

您需要使模态ID对于pizza的每次迭代都是唯一的。您可以使用forloop计数器或pizza对象的id(这将是唯一的)来完成此操作。就像这样:

<div class="card-footer d-flex justify-content-between">
    <a href="{% url 'store:custompizza' pk=pizza.pk %}" class="btn btn-primary btn-sm" data-bs-toggle="modal" data-bs-target="#exampleModal{{pizza.id}}">Customize</a>
    
    <!-- Modal -->
    <div class="modal fade" id="exampleModal{{pizza.id}}" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">

相关问题