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

时间:2015-03-08 17:33:49

标签: django twitter-bootstrap django-forms

我需要从数据库到用户显示几行。例如,我的表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>$80</td>
  </tr>
</table>
&#13;
&#13;
&#13;

我找到了this问题:

中描述的formset的解决方法
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 form做类似的事情。

所以我的问题是

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

1 个答案:

答案 0 :(得分:1)

表格用于编辑。由于您不需要编辑值,因此只需将上下文字典中的查询集传递给模板即可。一个例子是:

<强> views.py

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

<强>水果/ 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>