2012-10-08 41 views
4

我正在django/webfaction上创建一个博客。目前我的主页显示所有帖子的所有内容。我想调整它以显示每篇文章只有几行,每篇文章以“多读”链接结尾。如何实现这一目标?我是django和python的新手。请帮助我。在django帖子中阅读更多

代码中的Home.html:

{% block content %} 

    {% for post in object_list %} 
    <h2>{{ post.title }} </h2> 

    <div class = "post_meta"> 
     on {{ post.created}} 
    </div> 

    <div class = "post_body"> 
     {{ post.body|safe|linebreaks}} 
    </div> 

    {% endfor %} 

{% endblock %} 

在此先感谢。

回答

11

您可以使用内置的模板过滤器截断doc

<div class = "post_body"> 
     {{ post.body|safe|truncatewords:"50"|linebreaks }} 
     <a href="{{ url_for_full_content }}">read more</a> 
    </div> 
+0

如果帖子的长度小于50字,情况如何? – defuz

+0

@defuz您需要先判断内容的长度。 – iMom0

+0

你也可以使用truncatechars – eusid

2

你可以看到在django-model-utils extention场地模型SplitField执行:

from django.db import models 
from model_utils.fields import SplitField 

class Article(models.Model): 
    title = models.CharField(max_length=100) 
    body = SplitField() 

>>> a = Article.objects.all()[0] 
>>> a.body.content 
u'some text\n\n<!-- split -->\n\nmore text' 
>>> a.body.excerpt 
u'some text\n' 
>>> unicode(a.body) 
u'some text\n\n<!-- split -->\n\nmore text' 

它正确地做正是你需要的。详情请参阅doc

+0

没有依赖关系的方法是编写自己的分割字段,但IMO不认为这应该是模型逻辑。在这里使用自定义的模板标签看起来非常好,因此这只具有代表性的好处。 –