Django Wagtail TableBlock不能正确显示。

问题描述 投票:1回答:1

我是一个刚接触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)

我一直在阅读文档,我一直在到处寻找类似的问题,但我无法得到任何答案。

任何帮助将是感激的。

python html django wagtail
1个回答
0
投票

这是因为你把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 %}
© www.soinside.com 2019 - 2024. All rights reserved.