我想在StreamField中为使用TableBlock创建的表添加<caption>
标记,以使表更易于访问且在语义上正确。现在,默认模板没有该标签。我不确定应该如何自定义table.html
模板(从默认模板开始,如果我为表块创建自定义类以添加标题,则不确定如何呈现表。
<caption>
必须是<table>
的第一个孩子,这就是为什么我需要修改模板。有人做过吗?
<table>
<caption>Example Caption</caption> <--- Need this here
<thead>
<th>Header col 1</th>
<th>Header col 2</th>
</thead>
<tbody>
<tr>
<td>Cell col 1</td>
<td>Cell col 2</td>
</tr>
</tbody>
</table>
答案 0 :(得分:0)
看看下面的代码。
TableBlock.py
class TableHead(blocks.StructBlock):
table_head_text = blocks.ListBlock(blocks.CharBlock(max_length=120))
class TableRow(blocks.StructBlock):
table_row_text = blocks.ListBlock(blocks.CharBlock(max_length=120))
class TableBlock(blocks.StructBlock):
caption_text = blocks.CharBlock(max_length=120)
table_head = TableHead()
table_rows = blocks.ListBlock(TableRow())
class Meta:
template = 'wagtail_blocks/table.html'
您会注意到,我已经在'Meta'类中设置了'template'属性,因此您也必须创建该文件。
table.html
{% load wagtailcore_tags %}
<table>
<caption>{{ value.caption_text }}</caption>
<thead>
{% for header_text in value.table_head.table_head_text %}
<th>{{ header_text }}</th>
{% endfor %}
</thead>
<tbody>
{% for table_row in value.table_rows %}
<tr>
{% for table_row_text in table_row.table_row_text %}
<td>{{ table_row_text }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
最后,您可以在这样的任何页面中轻松使用新的TableBlock
body = StreamField([
('table', TableBlock()),
])