我是一个刚接触django和编程的新手,我一直在尝试在我的网站上使用Wagtail。
目前我被 "TableBlock "卡住了。
我设法正确地设置了模型和块,但是当html被渲染时,我没有得到一个表,而是一个字典。
这是我的代码。
{% for block in page.table %}
{% if block.block_type == 'table_horaire' %}
{% include_block block %}
{% else %}
<p>This is not working</p>
{% endif %}
{% endfor %}
这是我在Html上得到的结果。
{'data': [['Jour', 'Matin', 'Après-midi', None], ['Lundi', '9.00-12.00', '14.00-17.00', None], ['Mardi', '9.00-12.00', '14.00-17. 00', None], ['Mercredi', '9.00-12.00', 'Fermé', None], ['Jeudi', '9.00-12.00', '14.00-17.00', None], ['Vendredi', '9.00-12.00', '14.00-17.00', None]], 'cell': [], 'first_row_is_table_header': True, 'first_col_is_header': False, 'table_caption': 'Horaires'}。
这是我的模型
class HomePage(Page):
body = RichTextField(blank=True)
table = StreamField(
[
('table_horaire', blocks.TableHoraire())
],
null=True,
blank = True,
)
content_panels = Page.content_panels + [
FieldPanel('body', classname="full"),
StreamFieldPanel('table')
]
这是我的街区
from wagtail.core import blocks
from wagtail.contrib.table_block.blocks import TableBlock
new_table_options = {
'minSpareRows': 0,
'startRows': 6,
'startCols': 4,
'colHeaders': False,
'rowHeaders': False,
'contextMenu': True,
'editor': 'text',
'stretchH': 'all',
'height': 216,
'language': 'en',
'renderer': 'text',
'autoColumnSize': False,
}
class TableHoraire(blocks.StructBlock):
""" Home Page Hour block """
table = TableBlock(table_options = new_table_options)
我一直在阅读文档,我一直在到处寻找类似的问题,但我无法得到任何答案。
任何帮助将是感激的。
这是因为你把TableBlock放在了StructBlock里面。这方面的全部细节相当棘手(而且...)。在Wagtail文档中做了详细解释。),但简而言之,当你访问一个StructBlock的各个字段时(当你调用StructBlock的内置渲染时,这将作为StructBlock的一部分发生。{% include_block block %}
上的),它只给你该块的底层数据(例如,CharBlock的字符串,或者你看到的TableBlock的数据字典),而不是完整的块对象,知道如何将这些数据渲染成HTML。
一个只有一个字段的StructBlock并没有真正起到作用,所以更直接的解决方法是使用 TableBlock
直接在你的StreamField中代替。
table = StreamField(
[
('table_horaire', TableBlock(table_options=new_table_options))
],
null=True,
blank = True,
)
但如果你因为其他原因需要StructBlock,你可以访问 table
字段作为一个完整的可渲染区块,通过使用 bound_blocks
:
{% for block in page.table %}
{% if block.block_type == 'table_horaire' %}
{% include_block block.bound_blocks.table %}
{% endif %}
{% endfor %}