当在主页上看博客时,一般不会看到文章的正文,而是看一个摘要,如果没有摘要就看前面一小段,看正文则要在单独的博客页面上进行查看,因此有必要做一个链接可以链到单独博客页以进行continue reading...
适当修改index.html
#/myblog/blog/templates/index.html
1 {% extends "base.html" %}
2 {% block content %}
3 <div class = "posts">
4 {% for blog in blog_list %}
5 <section class="post">
6 <header class="post-header">
7 <h2 class= "post-title"><a href="{% url 'detail' id=blog.id %}">{{blog.title}}</a><h2>
8 <p class = "post-meta">
9 Time: <a class="post-author" href="#">{{blog.date_time | date:'Y M d'}}</a> 
10 Tag:
11 {% for tag in blog.tags.all %}
12 <a class="post-category" href="#">{{tag.tag_name|title}}</a>
13 {% endfor %}
14 </p>
15 </header>
16
17 <div class="post-description">
18 <p>
19 {{blog.content|safe|truncatewords:15}} #正文只显示15个字
20 <a class="pure-button" href={% url 'detail' id=blog.id %}>Continue Reading...</a> #continue reading链接到博客细节
21 </p>
22 </div>
23 </section>
24 {% endfor %}
当博客数量很多时有必要对页面进行分页,值得庆幸的是django本身自带分页的功能Paginator
#/myblog/blog/views.py
#重写index方法,使得支持分页功能
8 from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
11 def index(request):
12 blogs = Blog.objects.all()
13 tags = Tag.objects.all()
14 paginator = Paginator(blogs,3) #每页显示3篇blog进行分页
15 page = request.GET.get('page') #获取当前页的数字
16 try:
17 current_page = paginator.page(page) #获取当前页
18 except PageNotAnInteger: #如果系统从0开始,就赋初值为1
19 current_page = paginator.page(1)
20 blog_list = current_page.object_list #获得当前页的blog
21
22
23 return render_to_response('index.html',{'blog_list':blog_list,
24 'tags': tags,
25 'current_page':current_page})
新增index.html中适配分页
#/myblog/blog/templates/index.html
25 {% if blog_list and current_page.paginator.num_pages > 1 %} #博客数和总页数大于1
26 <div>
27 <ul class="post">
28 {% if current_page.has_previous %} #前一页
29 <li><a href="?page={{current_page.previous_page_number }}">previous page</a></li>
30 {% endif %}
31 {% if current_page.has_next %} #后一页
32 <li><a href="?page={{current_page.next_page_number }}">next page</a></li>
33 {% endif %}
34 </ul>
35 </div>
36 {% endif %}

标签分类,把标签放到左边,然后以标签来搜索相应标签的文章
step 1 新建url匹配归档的方法
#/myblog/blog/urls.py
1 from django.conf.urls import patterns, include, url
2
3 from django.contrib import admin
4
5 from blog import views
6
7 urlpatterns =[
8 url(r'^$', views.index, name='index'),
9 url(r'^(?P<id>(\d+))/$', views.detail, name='detail'),
10 url(r'^post/$', views.post, name='post'),
11 url(r'^blog_add/$', views.blog_add, name='blog_add'),
12 url(r'^uploadImg/$', views.uploadImg,name='uploadImg'),
13 url(r'^sub_comment/$', views.sub_comment,name='sub_comment'),
14 url(r'^tag_blog(?P<id>(\d+))/$', views.tag_blog,name='tag_blog'), #根据id来查找相应的标签
15 ]
step 2 新建 views方法来显示归档后的文章,这个页面与index页面是相同的,只是返回的blog_list不同,一个是全部博客,一个是相应标签的博客
104 def tag_blog(request,id):
105 tag = Tag.objects.get(id=id) #根据id获取当前tag
106 blogs = tag.blog_set.all() #由于tag与blog是多对多关系,可以根据tag查找相应的blog
107 paginator = Paginator(blogs,3)
108 page = request.GET.get('page')
109 try:
110 current_page = paginator.page(page)
111 except PageNotAnInteger:
112 current_page = paginator.page(1)
113 blog_list = current_page.object_list
114 return render_to_response('index.html',{'blog_list':blog_list,
115 'tag': tag,
116 'current_page':current_page})
step 3 修改base.html也就是主页中把标签放到左边,找到去归档的标签入口
12 <div class="sidebar pure-u-md-1-4">
13 <div class="header">
14 <h1 class="brand-title">terry ding blog</h1>
15 <h2 class="brand-tagline">Welcome to this Blog</h2>
16 <nav class="nav">
17 <ul class="nav-list">
18 <li class="nav-item">
19 <a class="pure-button" href="{% url 'index'%}">Blog</a>
20 </li>
21 <li class="nav-item">
22 <a class="pure-button" href="{% url 'post' %}">Post</a>
23 </li>
24 </ul>
25 <ul class="nav-list">
26 {% for tag in tags %}
27 <li class="nav-item">
28 <a class="pure-button" href="{% url 'tag_blog' id=tag.id %}">{{tag.tag_name|title}}</a>&nb #根据标签自身归档
sp;
29 </li>
30 {% endfor %}
31 </ul>
32 </nav>
33 </div>
34 </div>
博客已初俱功能了,界面还非常丑陋,这也不是一时半会儿就会好的,先将就着吧,以后有机会再优化