【问题标题】:Django truncate blog summary puzzleDjango 截断博客摘要拼图
【发布时间】:2016-05-19 13:46:41
【问题描述】:

我正在用 Django 构建博客并意识到我的模板:博客主页可以使用与单个博客相同的格式显示所有单独的帖子,唯一的区别是文本将被截断以进行摘要。

所以我所做的是定义一个模板来显示我将包含在主页模板中的博客:

{# blog/post_snippet.html #}
{% block content %}
    <h1> {{ post.title }} </h1>
    {% if post.author %}
        <h4>By {{ post.author.short_name }}</h4>
    {% endif %}

    {% if post.date_published %}
        <span>On {{ post.date_published }}</span>
    {% endif %}
    <p> {{ post.text | safe }} </p>
{% endblock %}

这会在“所有帖子”页面的 for 循环中使用:

{% block content %}
    {% for post in posts %}
        {% include 'blog/post_snippet.html' %}
    {% endfor %}
{% endblock %}

现在的问题是,当显示所有帖子时,我如何告诉模板系统截断博客文本?一种解决方案是复制模板代码,但我不想这样做。我也想过继承,但是我的模板已经继承了基础模板,而且我认为继承会立即插入所有内容,所以我无法控制块的位置??

实际上,我很困惑。这里的最佳做法是什么?

【问题讨论】:

  • 只需使用 create 2 sn-ps post_sinppet.htmlshort_post_snippet.html。我不记得有其他方式。

标签: django django-templates


【解决方案1】:

基本思想是通过传递一个参数来包含 post_sn-p.html,以告知您是否想要截断的文本版本。

首先,向模型添加一个属性,该属性将返回文本的截断版本,例如:

@property
def truncated_text():
    if len(self.text) > 100:
        return '%s...' % self.text[0:100]
    else:
        return self.text

在 post_sn-p.html 中,将 {{ post.text | safe }} 替换为:

{% if truncated %}{{ post.truncated_text | safe }}{% else %}{{ post.text | safe }}{% endif %}

在主页中,你只需要这样包含 post_sn-p.html :

{% include 'blog/post_snippet.html' with truncated=True %}

【讨论】:

  • 精彩绝伦的答案!
猜你喜欢
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多