一尘不染

使用Jinja过滤器创建内容片段

flask

我想为我的主页创建内容片段。一个示例帖子看起来像

<p>Your favorite Harry Potter characters enter the Game of Thrones 
universe, and you'll never guess what happens!</p>

<readmore/>

<p>...they all die</p>

在主页上,我只希望<readmore/>显示之前的内容。我在想可以在Jinja过滤器中使用Beautiful Soup来剪掉readmore及其后的所有内容。如果不<readmore/>存在,它应该剪切在第一个换行符或段落末尾。

我怎样才能做到这一点?


阅读 309

收藏
2020-04-07

共1个答案

一尘不染

只需检查<readmore/>文本中是否存在或其他子字符串,然后在其上拆分,或者在换行符上不拆分该子字符串。

from markupsafe import Markup

@app.template_filter()
def snippet(value):
    for sep in ('<readmore/>', '<br/>', '<br>', '</p>'):
        if sep in value:
            break
    else:
        sep = '\n'

    return Markup(value.split(sep, 1)[0])
2020-04-07