Django中遇到的一个html转义的问题

1、问题描述:有些页面上的字体突然变细,变红。

而正常的应该是这样:

起初我想不明白为什么会出现这种现象?因为同样的标签,同样的CSS,怎么会出现不同的样式呢?

2、发现问题原因
通过审查元素,发现,在该标签外层多加了code标签,类似于这样: ....... 我不明白这是怎么加的,我没有添加这个标签啊!后来才恍然大悟,是我的摘要中含有单个code标签,后续Django给自动补全了,这样被code裹住的标签就是按照bootstrap的样式显示。

3、问题原因详细说明

首先说下我的逻辑。 在写文章中,我用Markdown编辑内容,存到content字段,然后将markdown转换为HTML内容,并存储到content_html字段,然后abstract字段存储content_html的前200个字符。代码:

class Model(models.Model):
    def save(self):
        self.content_html = markdown(self.content,output_format='html5')
        self.abstract = self.content_html[:200]
        super(Article,self).save()

在我的content_html中有代码段,那在截取的时候就很有可能只截取了 ,却没有 。 abstract类似如下:

然后我在模板里关闭了自动转义,含有单个code的会被补全。所以就出现了上面的问题。

4、解决办法

重新写保存逻辑,将abstract直接保存为markdown原文。

    def save(self):
        self.content_html = markdown(self.content,output_format='html5')
        self.abstract = self.content_html[:200]
        super(Article,self).save()

这样就不会出现这种问题了。

5、总结

进步就是在不断发现问题,思考问题,解决问题的过程中发生的。

--------EOF---------
微信分享/微信扫码阅读