QzoneExporter icon indicating copy to clipboard operation
QzoneExporter copied to clipboard

[BUG]留言板欢迎信息中带图片的在Flask中访问会报错

Open Minuhy opened this issue 3 years ago • 2 comments

Describe the bug 导出留言板欢迎信息中带图片的留言板信息后,使用displayer.py在本地访问留言板信息时直接报错:类型不正确,应该是str或类似bytes的类型

To Reproduce 在空间的留言板中编辑欢迎信息,添加一张图,然后导出,导出后使用displayer.py在本地访问留言板

Expected behavior 一堆报错,最终定位在template_filters.py的content_beautify函数,类型不正确,是由模板引擎调用引起的错误

Solution 目前避免这个报错使其能正常访问可以在template_filters.py的content_beautify函数的所有while之前加上类型判断

def content_beautify(s):
    '''恢复字符串中可能存在的表情、html 标签、css 样式等
    '''

    # TODO 出错,强行避免
    if isinstance(s, jinja2.runtime.Undefined):
        print("TODO:搜索的一个奇怪东西,可能有的内容显示不出来")
        print("s(type):", type(s), 's:', s)
        return s

    while True:
        # 恢复 @用户
        m = AT_PATTERN.search(s)
        if not m:
            break
        s = s.replace(m[0], '<a href="/%s">@%s</a>' % (m[1], m[2]))
........................................后面的代码都没有变...............

但是这样留言板的图片不会显示,显示的是一个image标签

Minuhy avatar Aug 24 '22 01:08 Minuhy

留言板图片格式大概这样的:[img,300,200]http://a2.qpic.cn/psb?/V1rf=0-0[/img] 可以把 template_filters.py 中的 IMG_PATTERN 正则从 re.compile(r"\[img\](.*?)\[/img\]") 改为 re.compile(r"\[img.*\](.*?)\[/img\]") 这样可以正常显示图片,但是传入的s中使用print("s(type):", type(s), 's:', s)打印发现依然会有 s(type): <class 'jinja2.runtime.Undefined'> s: 这种类型,可能是模板引擎那边传过来的,模板引擎我不太懂,暂时只能通过判断规避这种类型

Minuhy avatar Aug 24 '22 01:08 Minuhy

收到,有空修复。

wwwpf avatar Aug 26 '22 13:08 wwwpf