【问题标题】:Blog excerpt in DjangoDjango 中的博客摘录
【发布时间】:2011-12-15 05:29:20
【问题描述】:

我正在 Django 中构建一个博客应用程序,当我显示所有博客时,我想显示每个条目的小博客摘录。谁能告诉我我该怎么做?

一种方法是创建一个额外的字段并存储固定数量的单词 每个博客条目,让我们说 20 个字。但那将是存储冗余信息 在数据库中。有没有更好的方法来做到这一点?

【问题讨论】:

  • 取决于您是否希望摘录可编辑来确定正确答案。可以简单地使用 def excerpt(self) 来完成,并将切碎的正文返回到一定的字符串长度,然后对 html 进行清理(如果有)。

标签: python django blogs


【解决方案1】:

我建议你使用truncatewords 模板过滤器。

模板示例:

<ul>
{% for blogpost in blogposts %}
    <li><b>{{blogpost.title}}</b>: {{blogpost.content|truncatewords:10}}</li>
{% endfor %}
</ul>

如果博客内容以 HTML 格式存储,请使用truncatewords_html 确保打开的标签在截断点后关闭(或与striptags 组合以删除 html 标签)。

如果要截断字符(不是单词),可以使用slice

{{blogpost.content|slice:":10"}}

(输出前 10 个字符)。

如果内容存储为 HTML,请结合 striptags 以避免打开标签问题:{{blogpost.content|striptags|slice:":10"}}

【讨论】:

  • 这会将单词截断到特定长度...但是,如果我想截断到特定数量的字符,有什么办法吗?因为单词的长度可能更长而且我不想要我的盒子变得太大
  • 如果您决定在博客模型中添加摘要字段,如果摘要为空,您可以回退到截断词(在模板中使用 if 和 else 标记)。但通常截断模板标签/过滤器是执行此操作的流行方法。
  • @Sachin:更新答案,截断字符数。
  • striptags 拯救了我的一天。感谢您的建议!
【解决方案2】:

在 Django 1.4 及更高版本中,有一个 truncatechars 过滤器将字符串截断为特定长度并以 ... 终止它。它实际上将其截断为特定长度 - 3,最后 3 个字符变为 ...

【讨论】:

    【解决方案3】:

    有点相关..

    我刚刚提供了这个问题的答案:Django strip_tags template filter add space,在制作包含 HTML 标记和

    标记中的简短内容的摘录时,它可能会帮助其他人。

    帮助转换这个..

    "<p>This is a paragraph.</p><p>This is another paragraph.</p>"
    

    到这个..

    'This is a paragraph. This is another paragraph.'
    

    而不是这个..

    'This is a paragraph.This is another paragraph.'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      相关资源
      最近更新 更多