jeffreyb
jeffreyb

Reputation: 163

Custom render RichTextBlock to remove <div class="rich-text">

I'm sure the answer is right there and I'm not seeing it. How can I render a RichTextBlock to remove the wrapping <div class="rich-text">?

{% include_block block %} and {{ block.value }} both give the wrapping div.

Upvotes: 4

Views: 2281

Answers (2)

Donnyvdm
Donnyvdm

Reputation: 26

I solved this by creating a custom template tag

In your project create a file in your templatetags directory (e.g. templatetags/wagtailcustom_tags.py) with content along the following.

from django import template
from django.utils.safestring import mark_safe

from wagtail.core.rich_text import RichText, expand_db_html

register = template.Library()


@register.filter
def richtext_withclasses(value, classes):
    if isinstance(value, RichText):
        html = expand_db_html(value.source)
    elif isinstance(value, str):
        html = expand_db_html(value)
    elif value is None:
        html = ""
    else:
        raise TypeError(
            "'richtext_withclasses' template filter received an invalid value; expected string, got {}.".format(
                type(value)
            )
        )

    return mark_safe('<div class="' + classes + '">' + html + "</div>")

Then in your templates load the template tag

{% load wagtailcustom_tags %}

and render richtext fields with the custom classes (or no classes at all)

{{ myfield | richtext_withclasses:"my custom class" }}

Upvotes: 0

gasman
gasman

Reputation: 25227

Unfortunately this is hard-coded and can't currently be overridden - see https://github.com/wagtail/wagtail/issues/1214.

Upvotes: 4

Related Questions