From b7a4570d96288be324a70513a5efc61ce060f964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BD=A6=E4=BA=AE=E4=BA=AE?= Date: Mon, 7 Nov 2016 22:50:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=87=E7=AD=BE=E7=AD=89?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=BE=85=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DjangoBlog/settings.py | 5 +++ blog/models.py | 11 +++-- blog/static/blog/css/blog.css | 7 +++ blog/templatetags/blog_tags.py | 26 +++++++++-- blog/urls.py | 1 + blog/views.py | 57 ++++++++++++++++++------- templates/{ => blog}/articledetail.html | 4 +- templates/blog/articletaglist.html | 14 ++++++ templates/{ => blog}/categorytree.html | 0 templates/{ => blog}/index.html | 9 ++++ 10 files changed, 109 insertions(+), 25 deletions(-) rename templates/{ => blog}/articledetail.html (98%) create mode 100644 templates/blog/articletaglist.html rename templates/{ => blog}/categorytree.html (100%) rename templates/{ => blog}/index.html (94%) diff --git a/DjangoBlog/settings.py b/DjangoBlog/settings.py index be83540..d93d1a0 100644 --- a/DjangoBlog/settings.py +++ b/DjangoBlog/settings.py @@ -132,3 +132,8 @@ DATE_TIME_FORMAT = '%Y-%m-%d %H:%M:%S' SITE_NAME = 'Django Blog' SITE_DESCRIPTION = '大巧无工,重剑无锋.' ARTICLE_SUB_LENGTH = 300 + +#bootstrap颜色样式 +BOOTSTRAP_COLOR_TYPES = [ + 'default', 'primary', 'success', 'info', 'warning', 'danger' +] diff --git a/blog/models.py b/blog/models.py index 2231eda..4a36367 100644 --- a/blog/models.py +++ b/blog/models.py @@ -34,12 +34,11 @@ class Article(models.Model): def get_absolute_url(self): return reverse('blog:detail', kwargs={'article_id': self.pk}) - def getCategoryNameTree(self): + def get_category_tree(self): names = [] - def parse(category): - names.append((category.name,category.get_absolute_url())) + names.append((category.name, category.get_absolute_url())) if category.parent_category: parse(category.parent_category) @@ -81,6 +80,12 @@ class Tag(models.Model): def __str__(self): return self.name + def get_absolute_url(self): + return reverse('blog:tag_detail', kwargs={'tag_name': self.name}) + + def get_article_count(self): + return Article.objects.filter(tags__name=self.name).distinct().count() + class Meta: ordering = ['name'] verbose_name = "标签" diff --git a/blog/static/blog/css/blog.css b/blog/static/blog/css/blog.css index e840bac..e0f5f3e 100644 --- a/blog/static/blog/css/blog.css +++ b/blog/static/blog/css/blog.css @@ -172,5 +172,12 @@ h6, .h6 { margin-top: 40px; margin-bottom: auto; color: #00CCFF; + border-bottom: 4px double #ededed; +} + +.article_taglist { + margin-top: 40px; + margin-bottom: auto; + border-bottom: 4px double #ededed; } \ No newline at end of file diff --git a/blog/templatetags/blog_tags.py b/blog/templatetags/blog_tags.py index e5ae32b..9103756 100644 --- a/blog/templatetags/blog_tags.py +++ b/blog/templatetags/blog_tags.py @@ -18,6 +18,7 @@ from django.conf import settings import markdown from django.template.defaultfilters import stringfilter from django.utils.safestring import mark_safe +import random register = template.Library() @@ -36,13 +37,15 @@ def timeformat(data): @stringfilter def custom_markdown(content): return mark_safe(markdown.markdown(content, - extensions=['markdown.extensions.fenced_code', 'markdown.extensions.codehilite'], + extensions= + ['markdown.extensions.fenced_code', + 'markdown.extensions.codehilite'], safe_mode=True, enable_attributes=False)) -@register.inclusion_tag('categorytree.html') -def parseCategoryName(article): - names = article.getCategoryNameTree() +@register.inclusion_tag('blog/categorytree.html') +def parsecategoryname(article): + names = article.get_category_tree() names.append((settings.SITE_NAME, 'http://127.0.0.1:8000')) names = names[::-1] @@ -50,6 +53,21 @@ def parseCategoryName(article): return {'names': names} +@register.inclusion_tag('blog/articletaglist.html') +def loadarticletags(article): + tags = article.tags.all() + tags_list = [] + for tag in tags: + url = tag.get_absolute_url() + count = tag.get_article_count() + tags_list.append(( + url, count, tag, random.choice(settings.BOOTSTRAP_COLOR_TYPES) + )) + return { + 'article_tags_list': tags_list + } + + """ @register.tag def parseCategoryName(parser,token): diff --git a/blog/urls.py b/blog/urls.py index 07d5024..bba5928 100644 --- a/blog/urls.py +++ b/blog/urls.py @@ -22,4 +22,5 @@ urlpatterns = [ url(r'^article/(?P\d+)$', views.ArticleDetailView.as_view(), name='detail'), url(r'^category/(?P\w+)$', views.CategoryDetailView.as_view(), name='category_detail'), url(r'^author/(?P\w+)$', views.AuthorDetailView.as_view(), name='author_detail'), + url(r'^tags/(?P\w+)$', views.TagDetailView.as_view(), name='tag_detail'), ] diff --git a/blog/views.py b/blog/views.py index b5e6328..5433764 100644 --- a/blog/views.py +++ b/blog/views.py @@ -13,32 +13,34 @@ from django.utils.safestring import mark_safe class ArticleListView(ListView): - template_name = 'index.html' + # template_name属性用于指定使用哪个模板进行渲染 + template_name = 'blog/index.html' + + # context_object_name属性用于给上下文变量取名(在模板中使用该名字) context_object_name = 'article_list' + def set_article_subbody(self, article_list): + for article in article_list: + article.body = article.body[0:settings.ARTICLE_SUB_LENGTH] + return article_list + def __init__(self): self.page_description = '' class IndexView(ArticleListView): - # template_name属性用于指定使用哪个模板进行渲染 - # template_name = 'index.html' - - # context_object_name属性用于给上下文变量取名(在模板中使用该名字) - # context_object_name = 'article_list' - def get_queryset(self): article_list = Article.objects.filter(status='p') - for article in article_list: - article.body = article.body[0:settings.ARTICLE_SUB_LENGTH] - # article.body = markdown2.markdown(article.body) + # for article in article_list: + # article.body = article.body[0:settings.ARTICLE_SUB_LENGTH] + # # article.body = markdown2.markdown(article.body) - return article_list + return self.set_article_subbody(article_list) class ArticleDetailView(DetailView): - template_name = 'articledetail.html' + template_name = 'blog/articledetail.html' model = Article pk_url_kwarg = 'article_id' context_object_name = "article" @@ -58,12 +60,12 @@ class CategoryDetailView(ArticleListView): def get_queryset(self): categoryname = self.kwargs['category_name'] # print(categoryname) - self.page_description = '分类目录归档: %s ' + self.page_description = '分类目录归档: %s ' % categoryname article_list = Article.objects.filter(category__name=categoryname, status='p') - return article_list + return self.set_article_subbody(article_list) def get_context_data(self, **kwargs): - # 增加额外的数据,这里返回一个文章分类,以字典的形式 + # 增加额外的数据 kwargs['page_description'] = self.page_description return super(CategoryDetailView, self).get_context_data(**kwargs) @@ -74,8 +76,31 @@ class AuthorDetailView(ArticleListView): self.page_description = '作者文章归档: %s ' % author_name article_list = Article.objects.filter(author__username=author_name) - return article_list + return self.set_article_subbody(article_list) def get_context_data(self, **kwargs): kwargs['page_description'] = self.page_description return super(AuthorDetailView, self).get_context_data(**kwargs) + + +class TagListView(ListView): + template_name = '' + context_object_name = 'tag_list' + + def get_queryset(self): + tags_list = [] + tags = Tag.objects.all() + for t in tags: + t.article_set.count() + + +class TagDetailView(ArticleListView): + def get_queryset(self): + tag_name = self.kwargs['tag_name'] + self.page_description = '分类标签: %s ' % tag_name + article_list = Article.objects.filter(tags__name=tag_name) + return self.set_article_subbody(article_list) + + def get_context_data(self, **kwargs): + kwargs['page_description'] = self.page_description + return super(TagDetailView, self).get_context_data(**kwargs) diff --git a/templates/articledetail.html b/templates/blog/articledetail.html similarity index 98% rename from templates/articledetail.html rename to templates/blog/articledetail.html index 0e2bf17..8cbac99 100644 --- a/templates/articledetail.html +++ b/templates/blog/articledetail.html @@ -10,7 +10,7 @@
{{ article.title }} - {% parseCategoryName article %} + {% parsecategoryname article %}
- + {% loadarticletags article %} {% comment %}

Another blog post

diff --git a/templates/blog/articletaglist.html b/templates/blog/articletaglist.html new file mode 100644 index 0000000..a8ea6e3 --- /dev/null +++ b/templates/blog/articletaglist.html @@ -0,0 +1,14 @@ +
+
标签
+
+ + + {% for url,count,tag,color in article_tags_list %} + + {{ tag.name }} + {{ count }} + + {% endfor %} + +
+
diff --git a/templates/categorytree.html b/templates/blog/categorytree.html similarity index 100% rename from templates/categorytree.html rename to templates/blog/categorytree.html diff --git a/templates/index.html b/templates/blog/index.html similarity index 94% rename from templates/index.html rename to templates/blog/index.html index a94b129..3638a2f 100644 --- a/templates/index.html +++ b/templates/blog/index.html @@ -3,6 +3,15 @@ {% block content %}
+ {% if page_description %} +
+
+
+ {{ page_description }} +
+
+
+ {% endif %}