Джанго трясогузка:- RichTextField против Streamfields RichTextBlock стиль первой буквы абзаца.

Теперь у меня есть немного раздражения с этими двумя. Мне нужно специально оформить первую букву абзацев. При использовании 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 %}

Таким образом, цель этого кода - выбрать стиль первой буквы, а затем продолжить с остальной частью абзаца. Это, однако, не работает, он берет первую букву, стилизует его, а затем печатает весь абзац, включая первую букву.

Итак, вопросы:

Как я могу стилизовать каждую первую букву абзаца для RichTextField и RichTextBlock, а не только для первой буквы всего элемента.

Как я могу убедиться, что это относится только к содержанию в абзаце. то есть, если кто-то заполнил контент только пулями (ul). Первая буква стиля не будет применяться. Лучший способ для этого был бы, если бы мы могли просто сделать все эти стили из админ-панели трясогузки для RichTextFiel и RichTextBlock.

1 ответ

Там нет необходимости, чтобы обернуть первую букву в <span> стилизовать его - CSS обеспечивает first-letter псевдоэлемент для этого. Объединяя это с <div class="rich-text"> которую Wagtail автоматически размещает вокруг каждого элемента расширенного текста, ваше правило CSS будет выглядеть примерно так:

.rich-text > p:first-letter {
    color: red;
}
Другие вопросы по тегам