####在blog下新建目录与文件
创建标签(blog_tags.py)
第一个标签是检索博客中发布的所以标签;
第二个标签是在侧栏中显示最新帖子;
第三个标签显示最近评论的帖子
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from django import template
from ..models import Post
from django.db.models import Count
register = template.Library() #用于注册自己模板标签和过滤器
@register.simple_tag #将函数注册为简单的标签
def total_posts():
return Post.published.count()
# 生成另一个标签,并在博客侧栏显示最新帖子
@register.inclusion_tag('blog/post/latest_posts.html') #注册模板标签,并指定利用返回值显示的模板
def show_latest_posts(count=5):
latest_posts = Post.published.order_by('-publish')[:count] #返回一个数值字典
return {'latest_posts':latest_posts}
#显示最近评论帖子
@register.simple_tag
def get_most_commented_posts(count=5):
return Post.published.annotate(total_comments=Count('comments')).order_by('-total_comments')[:count]
创建lates_posts.html为第二模板显示无序帖子列表
<ul>
{% for post in latest_posts %}
<li>
<a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
添加新的模板标签(base.html)
第一模板通过{%load}使其对模板生效并使用{%total_posts%}显示全部帖子;
第二模板以显示3个帖子;
第三个模板通过无序列表返回后的帖子;
{% load blog_tags %} {#加载模板标签模块#}
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="{% static "css/blog.css" %}">
</head>
<body>
<div id="content">
{% block content %}
{% endblock %}
</div>
<div id="sidebar">
<h2>My blog</h2>
<p>This is my blog.I've written{% total_posts %} posts so far.</p> {# 使用创建的标签显示全部帖子 #}
<h3>Latest posts</h3>
{% show_latest_posts 3 %} {# 添加新的模板标签,已显示最新的3个帖子 #}
<h3>Most commented posts</h3>
{% get_most_commented_posts as most_commented_posts %}
<ul>
{% for post in most_commented_posts %}
<li>
<a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
</div>
</body>
</html>