如何在不使用Jinja2模板显示HTML代码的情况下提供博客摘录?

use*_*981 3 jinja2 flask flask-sqlalchemy

目前我正在使用带烧瓶的jinja2,并在数据库中使用ckeditor存储了博客文章.

理想情况下,数据应首先显示图像,然后跟随博客文章和其他一些外部链接到flikr的图像.

我知道我可以使用{{ post.body | safe}}单个帖子里面的内容来显示html作为真实图像而不是html文本.

但是,我怎么不显示HTML,但在有多个链接到不同prosts和节录没有像HTML出现在网页后只显示文本摘要.

在这种情况下"这篇帖子专门用于xyz"应该是摘录

database body= column

<img alt="15189057555_7670752b57_o" class="main" src="https://farm6.staticflickr.com/5584/15189057555_7670752b57_o.jpg" style="width:100%;max-width:1920px"><p>This post is dedicated to xyz</p>
Run Code Online (Sandbox Code Playgroud)

Jinja2的

'post'是一个帖子对象.我试图将摘录限制为100个字母,而不使用html标签和图像.

{{post.body[:100]}}... 将会呈现 <img alt="15189057555_7670752b57_o" class="main" src="https://farm6.staticflickr.com/5584/1518905755...

以下是循环浏览所有帖子的代码摘录,以提供指向单个博客页面的链接,时间戳以及博客内容的摘录.

<h1>Latest Posts</h1>
{% if posts %}
    {% for post in posts%}
      <div class="post">
        <h2><a href="post/{{post.postid}}">{{post.title}}</a></h2>
        <h6>{{post.timestamp.strftime('%a %y/%m/%d')}}</h6>
        <p>{{post.body[:100]}}...</p>
        <p>Posted By: {{post.author.nickname}}</p>
      </div>
    {% endfor %}
{% else %}
    <h4>No blog posts currently</h4>
{% endif%}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来设计它?如果是这样,怎么样?请记住,我希望能够在一篇博文中插入多个图像和文本.

感谢你的帮助!

Dra*_*agu 7

您必须查看Jinja 的striptagstruncate过滤器http://jinja.pocoo.org/docs/dev/templates/#builtin-filters

例:

>>> from jinja2 import Template
>>> template = Template('blogpost: {{ post|striptags }}!')
>>> template.render(post='<img alt="15189057555_7670752b57_o" class="main" src="https://farm6.staticflickr.com/5584/15189057555_7670752b57_o.jpg" style="width:100%;max-width:1920px"><p>This post is dedicated to xyz</p>') 
u'blogpost: This post is dedicated to xyz!'
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您想要剥离标签,并限制为100个字符,所以替换

<p>{{post.body[:100]}}...</p>
Run Code Online (Sandbox Code Playgroud)

通过

<p>{{post.body|striptags|truncate(100)}}</p>
Run Code Online (Sandbox Code Playgroud)