flask中使用Markdown处理富文本怎么的时候怎么处理图片

模型如下:

class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer,primary_key=True)
    title = db.Column(db.String(128))
    body = db.Column(db.Text)
    body_html = db.Column(db.Text)
    timestamp = db.Column(db.DateTime,index=True,default=datetime.utcnow)

    @staticmethod
    def on_changed_body(target, value, oldvalue, initiator):
        allowed_tags = ['a', 'abbr', 'acronym', 'b', 'blockquote', 'code',
        'em', 'i', 'li', 'ol', 'pre', 'strong', 'ul','h1', 'h2', 'h3', 'p','img']
        target.body_html = bleach.linkify(bleach.clean(
            markdown(value, output_format='html'),
            tags=allowed_tags, strip=True))

db.event.listen(Post.body,'set',Post.on_changed_body)

现在遇到一个问题,就是在文本编辑框使用markdown语法使用图片,但是在插入数据库的时候没有保存图片,
虽然在allowed_tags中已经使用允许img标签,但是保存后图片src路径没了。
比如我保存一张图片,到数据库成了

<p><img></p>

请问应该怎么允许图片。

阅读 6.8k
1 个回答

你的问题有点歧义,你说的是保存图片,而你真正的意思是保存图片的URL。

我简单看了下bleach的文档,建议你可以给clean函数加个参数attributes=attrs,如下:

pythonattrs = {
    '*': ['class'],
    'a': ['href', 'rel'],
    'img': ['src', 'alt'],
}

target.body_html = bleach.linkify(bleach.clean(
    markdown(value, output_format='html'),
    tags=allowed_tags, attributes=attrs, strip=True))

这样就可以解决你的问题了。

更多参考资料请看:http://bleach.readthedocs.org/en/latest/clean.html

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进