我有以下代码:
<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
答案 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变量。
对于非常复杂的东西,最好编写自定义过滤器或模板标签,以使模板文件更清晰。