SharEDITor

从0到1搭建个人网站 七-在django模板中使用自定义属性

全栈技术 从0到1搭建个人网站 发表于 2017-07-28 07:24:00 阅读581次


稍复杂的一些展现需求,都会使得model自带的属性无法满足,因此需要做一些自定义的工作,便于在模板里使用,本节来介绍一下model的自定义属性

展示简单的文章标题

首先我们来把这样的标题《教你成为全栈工程师(Full Stack Developer) 十九-文章内容展示页面设计》去掉前面tag部分变成《十九-文章内容展示页面设计》,直接在模板里操作会比较复杂,这时我们来自定义一个get_simple_title的属性,修改web/models.py,为BlogPost类添加如下方法

def get_simple_title(self):
    return self.title.replace(self.tags.first().name, '')

这时我们修改web/templates/web/blog_show.html如下:

{% for blog_post in tag.get_latest_blogpost.all %}
    {% if forloop.counter < 5 %}
        <a href="{% url 'blog_show' %}?blogId={{ blog_post.id }}">
            {{ blog_post.get_simple_title }}
        </a>
        <br />
    {% endif %}
{% endfor %}

这样便直接展示了去掉标签后的标题了

 

获取最新n篇文章

在首页分标签栏目中,我们要展示最新发布的5篇文章,这同样难以在模板中实现,因此我们自定义get_latest_blogpost,在web/models.py的Tag类中添加:

def get_latest_blogpost(self, count=5):
    return self.blogpost_set.order_by('id').reverse()[0:count]

使用方法同上面文章标题用法

 

总结

本节简答介绍了自定义属性的使用场景和方法,这是在模板中遇到困难时第一个想到的方法,简便易行,下一节我们来介绍丰富的编辑器ckeditor的集成