Django将markdown转HTML,a标签自定义属性

Django将markdown转HTML,a标签自定义属性

发布:2023-11-27     分类:闲者编程     标签:DjangoMarkdown
2023 - 11 - 26

Django中使用将markdown文档转为HTML,如何给a标签设置target="_blank"

markdown.markdown(obj.body,
             extensions=[
                 'markdown.extensions.extra',
                 'markdown.extensions.codehilite',
                 'markdown.extensions.toc',
             ])

要在Django中将Markdown文档转换为HTML并为 a标签设置 target="_blank",你可以使用自定义Markdown扩展来实现这一点。以下是一个示例扩展,它将 a标签中的target属性设置为"_blank":

首先,创建一个名为markdown_extensions.py的Python文件,并在其中添加以下代码:

from markdown import Extension
from markdown.treeprocessors import Treeprocessor
from markdown.util import etree

class TargetBlankExtension(Extension):
    def extendMarkdown(self, md):
        md.registerExtension(self)
        self.processor = TargetBlankProcessor()
        md.treeprocessors.register(self.processor, 'target_blank', 15)

class TargetBlankProcessor(Treeprocessor):
    def run(self, root):
        for el in root.iter('a'):
            el.set('target', '_blank')

def makeExtension(**kwargs):
    return TargetBlankExtension(**kwargs)

然后,在你的Django项目中的某个适当位置,将上面的扩展导入到你的视图或模型中,并将其应用于Markdown文本:

import markdown
from .markdown_extensions import TargetBlankExtension  # 导入自定义扩展

# 在需要使用Markdown的地方
markdown_text = """
[示例链接](https://example.com)
"""

# 创建Markdown实例并应用扩展
md = markdown.Markdown(extensions=[
    'markdown.extensions.extra',
    'markdown.extensions.codehilite',
    'markdown.extensions.toc',
    TargetBlankExtension(),  # 使用自定义扩展
])

html_content = md.convert(markdown_text)

上述代码中,我们首先导入了自定义扩展TargetBlankExtension,然后在Markdown实例的扩展列表中包括它。这将确保在将Markdown文本转换为HTML时,链接的target属性将设置为"_blank",以在新标签页中打开链接。

更新:2023-11-27
点击评论
评论区