diff --git a/blog/admin.py b/blog/admin.py
index ea36708..41d421f 100644
--- a/blog/admin.py
+++ b/blog/admin.py
@@ -1,7 +1,7 @@
from django.contrib import admin
# Register your models here.
-from .models import Article, Category, Tag, Links
+from .models import Article, Category, Tag, Links, SideBar
from pagedown.widgets import AdminPagedownWidget
from django import forms
from django.contrib.auth import get_user_model
@@ -64,8 +64,13 @@ class LinksAdmin(admin.ModelAdmin):
exclude = ('last_mod_time', 'created_time')
+class SideBarAdmin(admin.ModelAdmin):
+ list_display = ('name', 'content', 'is_enable', 'sequence')
+ exclude = ('last_mod_time', 'created_time')
+
+
admin.site.register(Article, ArticlelAdmin)
-# admin.site.register(BlogPage, ArticlelAdmin)
admin.site.register(Category, CategoryAdmin)
admin.site.register(Tag, TagAdmin)
admin.site.register(Links, LinksAdmin)
+admin.site.register(SideBar, SideBarAdmin)
diff --git a/blog/models.py b/blog/models.py
index ea59849..9a14f37 100644
--- a/blog/models.py
+++ b/blog/models.py
@@ -211,3 +211,21 @@ class Links(models.Model):
def __str__(self):
return self.name
+
+
+class SideBar(models.Model):
+ """侧边栏,可以展示一些html内容"""
+ name = models.CharField('标题', max_length=100)
+ content = models.TextField("内容")
+ sequence = models.IntegerField('排序', unique=True)
+ is_enable = models.BooleanField('是否启用', default=True)
+ created_time = models.DateTimeField('创建时间', default=now)
+ last_mod_time = models.DateTimeField('修改时间', default=now)
+
+ class Meta:
+ ordering = ['sequence']
+ verbose_name = '侧边栏'
+ verbose_name_plural = verbose_name
+
+ def __str__(self):
+ return self.name
diff --git a/blog/templatetags/blog_tags.py b/blog/templatetags/blog_tags.py
index 46cd1a8..0c831f0 100644
--- a/blog/templatetags/blog_tags.py
+++ b/blog/templatetags/blog_tags.py
@@ -19,7 +19,7 @@ from django.template.defaultfilters import stringfilter
from django.utils.safestring import mark_safe
import random
from django.core.urlresolvers import reverse
-from blog.models import Article, Category, Tag, Links
+from blog.models import Article, Category, Tag, Links, SideBar
from django.utils.encoding import force_text
from django.shortcuts import get_object_or_404
import hashlib
@@ -125,6 +125,7 @@ def load_sidebar(user):
logger.info('load sidebar')
recent_articles = Article.objects.filter(status='p')[:settings.SIDEBAR_ARTICLE_COUNT]
sidebar_categorys = Category.objects.all()
+ extra_sidebars = SideBar.objects.filter(is_enable=True).order_by('sequence')
most_read_articles = Article.objects.filter(status='p').order_by('-views')[:settings.SIDEBAR_ARTICLE_COUNT]
dates = Article.objects.datetimes('created_time', 'month', order='DESC')
links = Links.objects.all()
@@ -150,7 +151,8 @@ def load_sidebar(user):
'sidebar_comments': commment_list,
'user': user,
'show_adsense': show_adsense,
- 'sidebar_tags': sidebar_tags
+ 'sidebar_tags': sidebar_tags,
+ 'extra_sidebars': extra_sidebars
}
diff --git a/blog/tests.py b/blog/tests.py
index 48f336b..0b3442f 100644
--- a/blog/tests.py
+++ b/blog/tests.py
@@ -1,5 +1,5 @@
from django.test import Client, RequestFactory, TestCase
-from blog.models import Article, Category, Tag
+from blog.models import Article, Category, Tag, SideBar
from django.contrib.auth import get_user_model
from django.contrib.sites.models import Site
from blog.forms import BlogSearchForm
@@ -29,6 +29,13 @@ class ArticleTest(TestCase):
response = self.client.get(user.get_absolute_url())
self.assertEqual(response.status_code, 200)
+ s = SideBar()
+ s.sequence = 1
+ s.name = 'test'
+ s.content = 'test content'
+ s.is_enable = True
+ s.save()
+
category = Category()
category.name = "category"
category.created_time = datetime.datetime.now()
@@ -53,6 +60,17 @@ class ArticleTest(TestCase):
article.save()
self.assertEqual(1, article.tags.count())
+ for i in range(20):
+ article = Article()
+ article.title = "nicetitle" + str(i)
+ article.body = "nicetitle" + str(i)
+ article.author = user
+ article.category = category
+ article.type = 'a'
+ article.status = 'p'
+ article.save()
+ article.tags.add(tag)
+ article.save()
response = self.client.get(article.get_absolute_url())
self.assertEqual(response.status_code, 200)
from DjangoBlog.spider_notify import SpiderNotify
@@ -69,20 +87,16 @@ class ArticleTest(TestCase):
self.assertIsNotNone(s)
p = Paginator(Article.objects.all(), 2)
- s = load_pagination_info(p.page(1), '', '')
- self.assertIsNotNone(s)
+ self.__check_pagination__(p, '', '')
- p = Paginator(Tag.objects.all(), 2)
- s = load_pagination_info(p.page(1), '分类标签归档', tag.slug)
- self.assertIsNotNone(s)
+ p = Paginator(Article.objects.filter(tags=tag), 2)
+ self.__check_pagination__(p, '分类标签归档', tag.slug)
- p = Paginator(BlogUser.objects.all(), 2)
- s = load_pagination_info(p.page(1), '作者文章归档', 'liangliangyy')
- self.assertIsNotNone(s)
+ p = Paginator(Article.objects.filter(author__username='liangliangyy'), 2)
+ self.__check_pagination__(p, '作者文章归档', 'liangliangyy')
- p = Paginator(Category.objects.all(), 2)
- s = load_pagination_info(p.page(1), '分类目录归档', category.slug)
- self.assertIsNotNone(s)
+ p = Paginator(Article.objects.filter(category=category), 2)
+ self.__check_pagination__(p, '分类目录归档', category.slug)
f = BlogSearchForm()
f.search()
@@ -95,6 +109,21 @@ class ArticleTest(TestCase):
u = gravatar_url('liangliangyy@gmail.com')
u = gravatar('liangliangyy@gmail.com')
+ def __check_pagination__(self, p, type, value):
+ s = load_pagination_info(p.page(1), type, value)
+ self.assertIsNotNone(s)
+ response = self.client.get(s['previous_url'])
+ self.assertEqual(response.status_code, 200)
+ response = self.client.get(s['next_url'])
+ self.assertEqual(response.status_code, 200)
+
+ s = load_pagination_info(p.page(2), type, value)
+ self.assertIsNotNone(s)
+ response = self.client.get(s['previous_url'])
+ self.assertEqual(response.status_code, 200)
+ response = self.client.get(s['next_url'])
+ self.assertEqual(response.status_code, 200)
+
def test_validate_feed(self):
user = BlogUser.objects.get_or_create(email="liangliangyy12@gmail.com", username="liangliangyy")[0]
user.set_password("liangliangyy")
@@ -124,6 +153,7 @@ class ArticleTest(TestCase):
self.assertEqual(rsp.status_code, 200)
SimpleUploadedFile()
"""
+
def test_errorpage(self):
self.client.get('/eee')
self.client.get('/refresh_memcache')
diff --git a/templates/blog/tags/sidebar.html b/templates/blog/tags/sidebar.html
index d802c3f..dddb2dd 100755
--- a/templates/blog/tags/sidebar.html
+++ b/templates/blog/tags/sidebar.html
@@ -8,6 +8,17 @@
+ {% if extra_sidebars %}
+ {% for sidebar in extra_sidebars %}
+
+
+ {% endfor %}
+ {% endif %}
{% if most_read_articles %}