Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django截断博客摘要难题_Django_Django Templates - Fatal编程技术网

Django截断博客摘要难题

Django截断博客摘要难题,django,django-templates,Django,Django Templates,我正在用Django构建一个博客,并意识到了我的模板:博客主页可以使用与单个博客相同的格式显示所有单独的帖子,唯一的区别是文本将被截断以进行摘要 因此,我所做的是定义一个显示博客的模板,并将其包含在主页模板中: {# blog/post_snippet.html #} {% block content %} <h1> {{ post.title }} </h1> {% if post.author %} <h4>By {{ po

我正在用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 %}
现在的问题是,当显示所有帖子时,我如何告诉模板系统截断博客文本?一个解决方案是复制模板代码,但我不想这样做。我也想过继承,但是我的模板已经从一个基础模板继承了,而且我认为继承会立即插入所有内容,因此我将无法控制块的放置


事实上,我很困惑。这里的最佳实践是什么?

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

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

@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}}
替换为:

{% if truncated %}{{ post.truncated_text | safe }}{% else %}{{ post.text | safe }}{% endif %}
在主页中,您只需通过以下方式包括post_snippet.html:

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

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

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

@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}}
替换为:

{% if truncated %}{{ post.truncated_text | safe }}{% else %}{{ post.text | safe }}{% endif %}
在主页中,您只需通过以下方式包括post_snippet.html:

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

只需使用创建两个代码片段
post\u sinppet.html
short\u post\u snippet.html
。没有其他方法可以记住。只需使用create 2 snippets
post\u sinppet.html
short\u post\u snippet.html
。我想不起来还有别的办法了。回答得真棒,真棒!聪明,聪明的回答!