2013-11-22 32 views
3

我正在使用模型表单,并且我已经在模板中呈现了如下形式。如何呈现多个列中的form.as_table

<table> 
    {{form.as_table}} 
</table> 

但问题是,它将所有字段呈现为行。由于我的模型包含200多行,因此当它将元素显示为200行时看起来很糟糕。我想将它们分成5列,所以总计行数将在40-43左右。是否有任何内置的模板标签可用于此或任何其他方式使用我们可以解决问题。

+0

您可以遍历表单域并根据需要进行渲染。 – Rohan

+0

罗汉你可以请示范代码,如何迭代。 thansk – sandeep

回答

3

你可以参考这个文档:looping over form fields

什么,你可以在你的模板做的是

{% for field in form %} 

    {%if forloop.counter|divisibleby:"5" %} 
     {#after 5 fields, somehow put elements in next row 
     of table, paragraph, or using divs etc 
     #} 
    {%endif%} 

    {{field}} 
{%endfor%} 
+0

感谢Rohan的工作 – sandeep

1

你的问题有点不清楚但是这个例子是绰绰有余。

该循环迭代列表data,我已经替换,以便它将在每行中显示column1,column2,column3,column4,column5作为示例目的。

<!DOCTYPE html> 
<html> 
<head> 
    <title>Jack of All Trades</title> 
</head> 
<body> 
<table border="1"> 
{% for element in data %} 
    <tr> 
    <td><p>column 1 </p></td> 
    <td><p>column 2 </p></td> 
    <td><p>column 3 </p></td> 
    <td><p>column 4 </p></td> 
    <td><p>column 5 </p></td> 
    </tr> 
{% endfor %} 
</tr> 
</table> 
</body> 
</html> 

假设data有5个元素会产生这样的:

enter image description here

1

这对我更好地工作(divisibleby:N,N- =列数):

  <form enctype="multipart/form-data" method="POST"> 
       {% csrf_token %} 
       {% for field in form %} 
        {{ field.label }} {{ field }} 
        {% if forloop.counter|divisibleby:"2" %} 
         <br> 
        {% endif %} 
       {% endfor %} 
       <input type="submit" value="Continue" /> 
      </form>