在华泰的draftail中包含显示代码和引号的元素

2024-09-28 03:18:19 发布

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

我刚开始了解摇尾蛇。如何为我的Wagtail配置所有内置的draftail格式。 我需要添加code和qoutes。在


Tags: 格式code内置wagtaildraftailqoutes
1条回答
网友
1楼 · 发布于 2024-09-28 03:18:19

我认为如果您使用StreamField来实现这个目的,我是这样做的(wagtail 1.13.1):

块.py

from django.utils.safestring import mark_safe
from django.utils.html import format_html

from pygments import highlight
from pygments.formatters import get_formatter_by_name
from pygments.lexers import get_lexer_by_name

from wagtail.wagtailcore import blocks


class CodeBlock(blocks.StructBlock):
    """
    Code Highlighting Block
    """
    LANGUAGE_CHOICES = (
        ('python', 'Python'),
        ('bash', 'Bash/Shell'),
        ('html', 'HTML'),
        ('css', 'CSS'),
        ('scss', 'SCSS'),
        ('json', 'JSON'),
        ('js', 'javaScript'),
        ('mysql', 'mysql'),
        ('jinja', 'jinja'),
        ('go', 'go')
    )

    STYLE_CHOICES = (
        ('default', 'default'),
        ('monokai', 'monokai'),
    )

    language = blocks.ChoiceBlock(choices=LANGUAGE_CHOICES)
    style = blocks.ChoiceBlock(choices=STYLE_CHOICES, default='default')
    code = blocks.TextBlock()

    class Meta:
        icon = 'code'

    def render(self, value, context=None):
        src = value['code'].strip('\n')
        lang = value['language']
        lexer = get_lexer_by_name(lang)
        css_classes = ['code', value['style']]

        formatter = get_formatter_by_name(
            'html',
            linenos='inline',
            cssclass=' '.join(css_classes),
            noclasses=False,
        )
        return mark_safe(highlight(src, lexer, formatter))


class BlockQuoteBlock(blocks.TextBlock):

    def render_basic(self, value, context=None):
        if value:
            return format_html(
                '<blockquote>{0}</blockquote>', mark_safe(value))
        else:
            return ''

    class Meta:
        icon = "openquote"

模型.py

^{pr2}$

我使用自定义BlockQuoteBlock,因为this issue。还要检查StreamField:http://docs.wagtail.io/en/v2.0/topics/streamfield.html#上的文档

相关问题 更多 >

    热门问题