在 django 模板中将多行显示为网格

Display multiple rows as grid in django template

我需要从数据库向用户显示几行。例如,我有 table Fruits 列:namecolorprice。所以我希望我的表单生成 html 类似紧凑的网格视图:

<table>
  <tr>
    <th>Name</th>
    <th>Color</th>
    <th>Price</th>
  </tr>
  <tr>
    <td>apples</td>
    <td>yellow</td>
    <td>100$</td>
  </tr>
  <tr>
    <td>pears</td>
    <td>green</td>
    <td></td>
  </tr>
</table>

我找到了使用 formset 的解决方法,如 this 问题中所述:

class Fruit(Model):
    name = CharField(max_length=100)
    color = CharField(max_length=100)
    price = CharField(max_length=100)

FruitFormSet = modelformset_factory(Fruit, form=FruitForm)
form = FruitFormSet(queryset=Fruit.objects.all())

这有点酷,但是代码太多,看起来有点笨拙。我想知道我是否可以用 django crispy forms 做类似的事情。

所以我的问题是:

在 django 中显示来自 table 的多行的最佳方法是什么?我不需要向用户提供编辑它的方法。我应该全部使用表格吗?或者我只需要将对象字典传递给模板,遍历它并添加 html 标签?

表单用于编辑。由于您不需要编辑这些值,您可以简单地将上下文字典中的查询集传递给您的模板。一个例子是:

views.py

def fruit_list(request):
    context = {'fruit_list': Fruit.objects.all()}
    return render(request, 'fruits/fruit_list.html', context)

fruits/fruit_list.html

<table>
  <tr>
    <th>Name</th>
    <th>Color</th>
    <th>Price</th>
  </tr>
  {% for fruit in fruit_list %}
  <tr>
    <td>{{ fruit.name }}</td>
    <td>{{ fruit.color }}</td>
    <td>{{ fruit.price }}$</td>
  </tr>
  {% endfor %}
</table>