【问题标题】:How to create a recursive table in HTML如何在 HTML 中创建递归表
【发布时间】:2012-02-25 17:35:18
【问题描述】:

我有以下代码:

                <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

【问题讨论】:

标签: html django


【解决方案1】:

为什么不直接做呢?

            <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>

如果您希望表格水平增长,只需​​将&lt;tr&gt;&lt;/tr&gt; 标签移到外部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>

上面的代码仅在关键字列表的长度可以被三整除时才有效,但它说明了总体思路。要解决这个问题,您可以例如将空项目附加到列表中,以使其满足该条件。这样做的自定义过滤器可能是个好主意。

如果你想要一些更复杂的东西,它又是一个 if 条件和 forloop 变量的游戏。

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

【讨论】:

  • thatnks zoltak,但我真正想要的是将列表显示为三列。如果我希望我的列表仅显示在一列中,则明确编码将起作用。
  • 添加上,如程序在第一列显示出10个关键字,它会自动在下一列显示关键字列表。这有可能吗?
  • 非常感谢。我现在对表格的工作方式有了更好的理解。再次感谢! :D
猜你喜欢
  • 2021-07-24
  • 2020-02-06
  • 2013-08-27
  • 1970-01-01
  • 2020-02-16
  • 2020-11-01
  • 2012-10-08
  • 2011-09-08
  • 1970-01-01
相关资源
最近更新 更多