首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django截断博客摘要拼图

Django截断博客摘要拼图
EN

Stack Overflow用户
提问于 2016-05-19 13:46:41
回答 1查看 153关注 0票数 0

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

因此,我所做的就是定义一个模板,用于显示我将包含在主页模板中的博客:

代码语言:javascript
运行
复制
{# 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 %}

这会在"all“页面的for循环中使用:

代码语言:javascript
运行
复制
{% block content %}
    {% for post in posts %}
        {% include 'blog/post_snippet.html' %}
    {% endfor %}
{% endblock %}

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-19 14:24:08

其基本思想是通过传递一个参数来包含post_snippet.html,以判断您是否想要文本的截断版本。

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

代码语言:javascript
运行
复制
@property
def truncated_text():
    if len(self.text) > 100:
        return '%s...' % self.text[0:100]
    else:
        return self.text

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

代码语言:javascript
运行
复制
{% if truncated %}{{ post.truncated_text | safe }}{% else %}{{ post.text | safe }}{% endif %}

在主页中,您只需要以这种方式包含post_snippet.html:

代码语言:javascript
运行
复制
{% include 'blog/post_snippet.html' with truncated=True %}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37325188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档