从 wagtail 的富文本字段中删除 <p> 标签

Remove <p> tag from wagtail's richtext field

当您在 Wagtail Admin 的 Wagtail 富文本编辑器中输入没有任何样式(例如粗体、ul、斜体)的文本时,该文本(发布后)显示 'coated' 或嵌入 <p>标签。文本也保存在数据库中,文本内容周围带有 <p> 标签。

但是我想在没有 <p> 标签的情况下访问文本。请问我该怎么做?从我所做的研究来看,很明显 wagtail 已将其设为默认行为 [并且出于明显的一般用例原因],但是,如果也可以在没有边界的情况下访问文本,那就太好了 <p> 标签。

我想访问模板中的内容,以便从前端查看。拥有 <p> 标签对我的 CSS 有很大的伤害,而反对 wagtail 的默认设计就像在黑暗中打猎

我试过 StreamFieldsStructBlocks。内容仍然有 <p> 标签。似乎没有办法摆脱 <p> 标签并访问所需的信息。

谢谢,希望得到好评。

如果您不是特别需要富文本功能,那么使用 RAWHtmlBlock 可能更合适。例如:

body = StreamField([
    ('raw', RawHTMLBlock()),
])

将输出:

<div class="block-raw">Your unmodified content</div>

如果您只需要删除 <p> 而保留其他标记,您可以考虑注册一个 RewriteHandler 来去除 <p> 标签以进行渲染。看 Rich text internals

另一种粗略的方法是定义一个自定义块模板,在呈现 {{ value }} 之前去除 <p>s。

# models.py
body = StreamField([
    ('bare', RichTextBlock(template='blocks/bare.html'))
])

# templates/blocks/bare.html
<script>
    /* Do something with {{ value }} */
    document.write(new_value);
</script>