gpt4 book ai didi

python - 在自定义 Python Markdown 扩展的输出中禁用 HTML 编码

转载 作者:太空狗 更新时间:2023-10-30 01:16:58 25 4
gpt4 key购买 nike

我一直致力于创建一个 python markdown 扩展,当使用自定义标签时,它将在我的 django 项目中插入一个图片库。实际的扩展是有效的,但扩展返回的 HTML 都是经过编码的。这是我正在使用的扩展:

#!/usr/bin/env python
from django.template.loader import render_to_string
from main.models import *

import markdown

version = "0.1.0"

class GalleriaExtension(markdown.Extension):
def __init__(self, configs):
self.config = {
}

# Override defaults with user settings
for key, value in configs:
self.setConfig(key, value)

def add_inline(self, md, name, klass, re):
pattern = klass(re)
pattern.md = md
pattern.ext = self
md.inlinePatterns.add(name, pattern, "<reference")

def extendMarkdown(self, md, md_globals):
self.add_inline(md, 'galleria', Galleria,
r'\[\[(G|g)allery (?P<superpage_id>\w+)\]\]')

class Galleria(markdown.inlinepatterns.Pattern):
def handleMatch(self, m):
try:
images = SuperPage.objects.get(id=m.group('superpage_id')).superpageimage_set.all()
except:
images = None
if images:
rendered = render_to_string('galleria.html', { 'images': images })
else:
rendered = '<b>There are no images for the given ID</b>'
return rendered

def makeExtension(configs=None) :
return GalleriaExtension(configs=configs)

我确保 render_to_string 实际上返回未编码的 html。这里是 shell 的输出示例:

render_to_string 的输出:

>>> from django.template.loader import render_to_string
>>> images = SuperPage.objects.get(id=8).superpageimage_set.all()
>>> render_to_string('galleria.html', { 'images': images })
u'<div class=\'galleria_std\'>\n <div class=\'gallery\' >\n <div id=\'stage_gallery\' >\n'

这是编码后的 markdown 扩展的输出:

>>>markdown.markdown('test [[gallery 8]] test', ['galleria'])
u'<p>test &lt;div class=\'galleria_std\'&gt;\n &lt;div class=\'gallery\' &gt;\n'

在使用 markdown 扩展时,如何让 rendered 返回 HTML 标记而不是编码标记?另外,我将不胜感激任何关于以不同方式编码的指示(语法、布局等)。我很感激。

最佳答案

如果您正在寻找一种避免自定义标签呈现的内容被自动转义的方法,那么您可以使用 django.utils.safestring.mark_safe 将字符串标记为安全的.

您可以在 django 代码本身中看到一些示例。例如在 defaulttags.py .

关于python - 在自定义 Python Markdown 扩展的输出中禁用 HTML 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com