From 5844d3369b00fb7f746bc545f472232084b1f93b Mon Sep 17 00:00:00 2001 From: liangliang Date: Sun, 17 Dec 2017 01:58:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BE=A7=E8=BE=B9=E6=A0=8F?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E3=80=82=20=20close=20#59?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blog/admin.py | 9 ++++-- blog/models.py | 18 +++++++++++ blog/templatetags/blog_tags.py | 6 ++-- blog/tests.py | 54 +++++++++++++++++++++++++------- templates/blog/tags/sidebar.html | 11 +++++++ 5 files changed, 82 insertions(+), 16 deletions(-) diff --git a/blog/admin.py b/blog/admin.py index ea36708bd..41d421f43 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 ea598495e..9a14f374b 100644 --- a/blog/models.py +++ b/blog/models.py @@ -211,3 +211,21 @@ class Meta: 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 46cd1a8f0..0c831f064 100644 --- a/blog/templatetags/blog_tags.py +++ b/blog/templatetags/blog_tags.py @@ -19,7 +19,7 @@ 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 48f336b9b..0b3442f7b 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 @@ def test_validate_article(self): 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 @@ def test_validate_article(self): 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 @@ def test_validate_article(self): 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 @@ def test_validate_article(self): 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 @@ def test_image(self): 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 d802c3f55..dddb2dd8e 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 %}