Django之便签生成

 

myblog_tag.py

#coding:utf-8
__author__ = 'similarface'
from django import template

register=template.Library()

from ..models import Post

@register.simple_tag
def total_posts():
'''
文章总数
:return:返回发布的文章总篇数
'''
return Post.published.count()

 模版:

{% load blog_tags %}
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
    <link href="{% static "css/blog.css" %}" rel="stylesheet">
</head>
<body>
    <div id="content">
        {% block content %}
        {% endblock %}
    </div>
    <div id="siderbar">
        <h2>我的博客</h2>
        <p>目前已写文章总数 {% total_posts %} .</p>
    </div>
</body>
</html>

看下面,哦,还是挺丑的 

 纳尼 这也太low了

go on add myblog_tag.py here:

@register.inclusion_tag('myblog/post/latest_posts.html')
def show_latest_posts(count=5):
    '''
    最新count篇文章
    :param count: 文章的篇数 默认5篇
    :return:最新count篇文章的对象
    '''
    latest_posts=Post.published.order_by('-publish')[:count]
    return {'latest_posts':latest_posts}
#myblog/post/latest_posts.html:
<ul>
    {% for post in latest_posts %}
        <li>
            <a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
        </li>
    {% endfor %}
</ul>

 模版修改下:

<div id="siderbar">
        <h2>我的博客</h2>
        <p>目前已写文章总数 {% total_posts %} .</p>
        <h3>最新文章</h3>
        {% show_latest_posts 3 %}
    </div>

 

 哦 原来是个🐦。。。

 哦 你再改改试试

#coding:utf-8
__author__ = 'similarface'
from django import template
from django.db.models import Count
register=template.Library()
from  ..models import Post

@register.simple_tag()
def total_posts():
    '''
    文章总数
    :return:返回发布的文章总篇数
    '''
    return Post.published.count()


@register.inclusion_tag('myblog/post/latest_posts.html')
def show_latest_posts(count=5):
    '''
    最新count篇文章
    :param count: 文章的篇数 默认5篇
    :return:最新count篇文章的对象
    '''
    latest_posts=Post.published.order_by('-publish')[:count]
    return {'latest_posts':latest_posts}

@register.assignment_tag
def get_most_commented_posts(count=5):
    '''
    返回评论最多的前count篇文章
    :param count:默认为5
    :return:返回评论最多的前count篇文章
    '''
    return Post.published.annotate(total_comments=Count('comments')).order_by('-total_comments')[:count]

模版:

<div id="siderbar">
        <h2>我的博客</h2>
        <p>目前已写文章总数 {% total_posts %} .</p>
        <h3>最新文章</h3>
        {% show_latest_posts 3 %}
        <h3>最受欢迎的文章</h3>
        {% get_most_commented_posts as most_commented_posts %}
        <ul>
            {% for post in most_commented_posts %}
            <li>
                <a href="{{ post.get_absoulte_url }}">{{ post.title }}</a>
            </li>
            {% endfor %}
        </ul>
    </div>

 尼玛这。。。感觉记不住

 

程序员多么苦逼,一个Django 的小小功能都这么change

 

posted @ 2016-04-20 10:28  similarface  阅读(304)  评论(0编辑  收藏  举报