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

时间:2014-09-25 04:32:44

标签: flask jinja2 flask-sqlalchemy

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

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

我知道我可以在单个帖子视图中使用{{ post.body | safe}}来将html显示为真实图像而不是html文本。

但是,我怎么不显示html,但只显示页面中帖子中的文字摘录,其中有多个链接到不同的假肢和摘录而没有显示图像html。

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

数据库body =列

<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>

的Jinja2

&#39;后&#39;是一个帖子对象。我试图将摘录限制为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%}

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

您必须查看Jinja的{strong> striptags 和 truncate 过滤器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!'

在您的情况下,您要剥离标记,并限制为100个字符,因此请替换

<p>{{post.body[:100]}}...</p>

通过

<p>{{post.body|striptags|truncate(100)}}</p>