Django Wagtail表块未正确显示

2024-09-29 20:23:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我是django和编程新手,我一直在尝试在我的网站上使用Wagtail

我现在被“桌面块”卡住了

我成功地正确设置了模型和块,但是当呈现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','Mardi','9.00-12.00','14.00-17.00','None],'Mercredi','9.00-12.00','Jeudi','9.00-12.00','14.00-17.00',None],'Vendredi 9.00-12.00','14.00-17.00','None],'cell'.[],“第一行是表格标题”:True,“第一列是标题”:False,“表格标题”:“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)

我一直在看文档,我到处寻找类似的问题,但我找不到任何asnwers

任何帮助都将不胜感激


Tags: 模型nonefalsetrue标题pagetablebody
2条回答

这是将TableBlock放置在StructBlock中的结果。这方面的全部细节相当棘手(和explained in detail in the Wagtail docs),但简短的版本是,当您访问StructBlock的各个字段时(在调用{% include_block block %}时,这是StructBlock的内置呈现的一部分),它只提供该块的底层数据(例如,CharBlock的字符串或TableBlock的数据字典),而不是知道如何将该数据呈现为HTML的完整块对象

只有一个字段的StructBlock实际上没有什么用处,因此更简单的解决方法是直接在StreamField中使用TableBlock

table = StreamField(
    [
        ('table_horaire', TableBlock(table_options=new_table_options))
    ],
    null=True,
    blank = True,
)

但是,如果出于其他原因需要StructBlock,可以通过bound_blocks访问其中的table字段作为完整的可渲染块:

{% for block in page.table %}
    {% if block.block_type == 'table_horaire' %}
        {% include_block block.bound_blocks.table %}
    {% endif %}
{% endfor %}

你的代码似乎不对,而且有错误。下面更正一条:

{% for block in page.table %}
    {% if block.block_type == 'table_horaire' %}
        {% include_block value.bound_blocks.table %}
    {% endif %}
{% endfor %}

official docs

无论如何,谢谢你的回复

相关问题 更多 >

    热门问题