如何在HTML中创建递归表

时间:2012-02-25 07:57:38

标签: html django

我有以下代码:

                <h3 style="margin: 0px; margin-bottom: 20px;">Click the checkboxes for more subscriptions</h3>
                {% for keyword in keyword_list %}
                    {% if keyword.keyword_name == userprofile.keywords_subscribed  %}
                        <input type="checkbox" disabled="disabled" name="keywords" value="keywords"/>
                        {{keyword.keyword_name}}
                        <br />
                    {% else %}
                        <input type="checkbox" name="cb" value="keywords"  />
                        {{keyword.keyword_name}}
                        <br />
                    {% endif %}
                {% endfor %}

现在它只是逐个显示一个关键字复选框。我想知道是否有任何可以将其变成表格的形式。

我需要表格是动态的,因为列表中的关键字数量会继续扩展。

我尝试使用存储在数据库中的关键字ID来提出一些解决方案,但这是一种繁琐的方法。

我可能错过了任何其他有效的方法吗?

这是django和html的混合,所以不要被独特的术语所震惊。 :P

感谢您的帮助! :d

1 个答案:

答案 0 :(得分:3)

为什么不明确地做到这一点?

            <h3 style="margin: 0px; margin-bottom: 20px;">Click the checkboxes for more subscriptions</h3>
            <table>
              <tbody>
                {% for keyword in keyword_list %}
                  <tr>
                    <td>
                      {% if keyword.keyword_name == userprofile.keywords_subscribed  %}
                        <input type="checkbox" disabled="disabled" name="keywords" value="keywords"/>
                      {% else %}
                        <input type="checkbox" name="cb" value="keywords"  />
                      {% endif %}
                      {{keyword.keyword_name}}
                    </td>
                  </tr>
                {% endfor %}
               </tbody>
            </table>

如果您希望表格水平增长,只需​​将<tr></tr>标记移到外部for之外。

要进行进一步部署,您可能需要使用Django Forms,并将custom templates打包到FormsSet

修改

如果您想要一个N列布局(例如3列),您可以访问forloop.counter变量:

            <h3 style="margin: 0px; margin-bottom: 20px;">Click the checkboxes for more subscriptions</h3>
            <table>
              <tbody>
                {% for keyword in keyword_list %}
                  {% if forloop.counter|divisibleby:"3" %}
                    <tr>
                  {% endif}
                    <td>
                      {% if keyword.keyword_name == userprofile.keywords_subscribed  %}
                        <input type="checkbox" disabled="disabled" name="keywords" value="keywords"/>
                      {% else %}
                        <input type="checkbox" name="cb" value="keywords"  />
                      {% endif %}
                      {{keyword.keyword_name}}
                    </td>
                  {% if forloop.counter|add:"1"|divisibleby:"3" %}
                    </tr>
                  {% endif}
                {% endfor %}
               </tbody>
            </table>

上面的代码仅在关键字列表的长度可以被3整除时起作用,但它说明了一般的想法。要解决这个问题,您可以将空项添加到列表中,以使其满足该条件。这样做的自定义过滤器可能是个好主意。

如果你想要更复杂的东西,那么再次使用if条件和forloop变量。

对于非常复杂的东西,最好编写自定义过滤器或模板标签,以使模板文件更清晰。