Django wagtail:- RichTextField 与 Streamfields RichTextBlock 样式段落的第一个字母。

Django wagtail:- RichTextField vs Streamfields RichTextBlock styling first letter of paragraph.

现在我对这两个有点厌烦。我需要特别设计段落的 首字母 的样式。使用 RichTextField 时,模板中的示例代码有效。在某种程度上,它设置了 RichTextField 的第一个字母的样式,而不是其中每个段落的第一个字母的样式。

<span class="first-letter-styling">{{ page.translated_body | striptags | make_list | first }}</span>

{{ page.translated_body | slice:"4:" |  richtext }}

然而,当尝试对 RichTextBlock 流字段中的块执行相同操作时,上述操作无效。它简单地输出了整个块,我什至不需要添加“| richtext”过滤器。

{% for block in blocks %}
    {% if block.block_type == 'block' %}
        {% with bs=block.value %}
            <h2>{{ bs.title }}</h2>
            <p>
                <span class="first-letter-styling">{{ bs.content | striptags | make_list | first }}</span>
            </p>
            <p>{{ bs.content | slice:"4:" |  richtext }}</p>
        {% endwith %}
    {% endif %}
{% endfor %}

所以这段代码的目的是采用第一个字母的样式,然后继续段落的其余部分。然而,这不起作用,它采用第一个字母样式,然后打印包括第一个字母在内的整个段落。

所以问题是:

如何为 RichTextFieldRichTextBlock 设置段落的每个首字母的样式,而不仅仅是整个项目的首字母。

如何确保它仅适用于段落中的内容。即如果有人只用项目符号 (ul) 填充内容。首字母样式将不适用。如果我们可以从 RichTextFiel 和 RichTextBlock 的 wagtail 管理面板简单地完成所有这些样式,那么最好的方法就是这样做。

无需将第一个字母包裹在 <span> 中来设置样式 - CSS 为此提供了一个 first-letter 伪元素。将其与 Wagtail 自动放置在每个富文本元素周围的 <div class="rich-text"> 相结合,您的 CSS 规则将类似于:

.rich-text > p:first-letter {
    color: red;
}