From 4aa905283ec2c4a6ccd07b7883421bf5b2710176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BD=A6=E4=BA=AE=E4=BA=AE?= Date: Thu, 22 Dec 2016 22:45:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84seo=E5=8A=9F=E8=83=BD,?= =?UTF-8?q?=E5=AE=8C=E5=96=84feed=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DjangoBlog/feeds.py | 35 +++++++++++++++++++ DjangoBlog/settings.py | 2 ++ DjangoBlog/urls.py | 4 ++- blog/admin.py | 4 +-- blog/context_processors.py | 4 ++- blog/models.py | 20 +++++++---- blog/urls.py | 4 +-- blog/views.py | 39 ++++++++++++++++++++-- templates/base.html | 13 ++++---- templates/blog/articledetail.html | 16 ++++++++- templates/blog/index.html | 11 +++++- templates/blog/tags/article_meta_info.html | 2 +- templates/nav.html | 10 ++++-- 13 files changed, 139 insertions(+), 25 deletions(-) create mode 100644 DjangoBlog/feeds.py diff --git a/DjangoBlog/feeds.py b/DjangoBlog/feeds.py new file mode 100644 index 0000000..2dee3cf --- /dev/null +++ b/DjangoBlog/feeds.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# encoding: utf-8 + + +""" +@version: ?? +@author: liangliangyy +@license: MIT Licence +@contact: liangliangyy@gmail.com +@site: https://www.lylinux.org/ +@software: PyCharm +@file: feed.py +@time: 2016/12/22 下午10:16 +""" + +from django.contrib.syndication.views import Feed +from blog.models import Article +from django.conf import settings + + +class DjangoBlogFeed(Feed): + title = "%s %s " % (settings.SITE_NAME, settings.SITE_DESCRIPTION) + link = "/feed" + + def items(self): + return Article.objects.order_by('-pub_time')[:5] + + def item_title(self, item): + return item.title + + def item_description(self, item): + return item.body + + def item_link(self, item): + return item.get_absolute_url() diff --git a/DjangoBlog/settings.py b/DjangoBlog/settings.py index 1ed9316..d7dfe30 100644 --- a/DjangoBlog/settings.py +++ b/DjangoBlog/settings.py @@ -143,6 +143,8 @@ DATE_TIME_FORMAT = '%Y-%m-%d' SITE_NAME = 'Django Blog' SITE_DESCRIPTION = '大巧无工,重剑无锋.' +SITE_SEO_DESCRIPTION = '小站主要用来分享和记录学习经验,教程,记录个人生活的点滴以及一些随笔.欢迎大家访问小站' + ARTICLE_SUB_LENGTH = 300 # bootstrap颜色样式 diff --git a/DjangoBlog/urls.py b/DjangoBlog/urls.py index bf0b54b..4acca8d 100644 --- a/DjangoBlog/urls.py +++ b/DjangoBlog/urls.py @@ -17,6 +17,7 @@ from django.conf.urls import url, include from django.contrib import admin from django.contrib.sitemaps.views import sitemap from DjangoBlog.sitemap import StaticViewSitemap, ArticleSiteMap, CategorySiteMap, TagSiteMap, UserSiteMap +from DjangoBlog.feeds import DjangoBlogFeed sitemaps = { @@ -35,5 +36,6 @@ urlpatterns = [ url(r'', include('accounts.urls', namespace='account', app_name='accounts')), url(r'', include('oauth.urls', namespace='oauth', app_name='oauth')), url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, - name='django.contrib.sitemaps.views.sitemap') + name='django.contrib.sitemaps.views.sitemap'), + url(r'^feed/$', DjangoBlogFeed()) ] diff --git a/blog/admin.py b/blog/admin.py index 7fe03c4..50782e2 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, BlogPage +from .models import Article, Category, Tag, Links from pagedown.widgets import AdminPagedownWidget from django import forms @@ -19,7 +19,7 @@ class ArticlelAdmin(admin.ModelAdmin): admin.site.register(Article, ArticlelAdmin) -admin.site.register(BlogPage, ArticlelAdmin) +#admin.site.register(BlogPage, ArticlelAdmin) admin.site.register(Category) admin.site.register(Tag) admin.site.register(Links) diff --git a/blog/context_processors.py b/blog/context_processors.py index 9917afd..b003074 100644 --- a/blog/context_processors.py +++ b/blog/context_processors.py @@ -19,8 +19,10 @@ from django.conf import settings def seo_processor(requests): return { 'SITE_NAME': settings.SITE_NAME, + 'SITE_SEO_DESCRIPTION': settings.SITE_SEO_DESCRIPTION, 'SITE_DESCRIPTION': settings.SITE_DESCRIPTION, 'SITE_BASE_URL': 'http://' + requests.get_host() + '/', 'ARTICLE_SUB_LENGTH': settings.ARTICLE_SUB_LENGTH, - 'nav_category_list': Category.objects.all() + 'nav_category_list': Category.objects.all(), + # 'nav_pages': BlogPage.objects.filter(status='p') } diff --git a/blog/models.py b/blog/models.py index f2992f5..2319f3e 100644 --- a/blog/models.py +++ b/blog/models.py @@ -15,20 +15,24 @@ class Article(models.Model): ('o', '打开'), ('c', '关闭'), ) + TYPE = ( + ('a', '文章'), + ('p', '页面'), + ) title = models.CharField('标题', max_length=200) body = models.TextField('正文') created_time = models.DateTimeField('创建时间', auto_now_add=True) last_mod_time = models.DateTimeField('修改时间', auto_now=True) pub_time = models.DateTimeField('发布时间', blank=True, null=True, help_text="不指定发布时间则视为草稿,可以指定未来时间,到时将自动发布。") - status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES, default='o') - comment_status = models.CharField('评论状态', max_length=1, choices=COMMENT_STATUS) - # summary = models.CharField('摘要', max_length=200, blank=True, help_text="可选,若为空将摘取正文的前300个字符。") + status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES, default='p') + comment_status = models.CharField('评论状态', max_length=1, choices=COMMENT_STATUS, default='o') + type = models.CharField('类型', max_length=1, choices=TYPE, default='a') views = models.PositiveIntegerField('浏览量', default=0) author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='作者', on_delete=models.CASCADE) - category = models.ForeignKey('Category', verbose_name='分类', on_delete=models.CASCADE) - tags = models.ManyToManyField('Tag', verbose_name='标签集合', blank=True) + category = models.ForeignKey('Category', verbose_name='分类', on_delete=models.CASCADE, blank=True, null=True) + tags = models.ManyToManyField('Tag', verbose_name='标签集合', blank=True, null=True) slug = models.SlugField(default='no-slug', max_length=60, blank=True) wordpress_id = models.IntegerField() @@ -80,6 +84,7 @@ class Article(models.Model): parent_comments = comments.filter(parent_comment=None) +''' class BlogPage(models.Model): """文章""" STATUS_CHOICES = ( @@ -113,7 +118,6 @@ class BlogPage(models.Model): return self.title def get_absolute_url(self): - return reverse('blog:pagedetail', kwargs= { 'page_id': self.id, @@ -139,6 +143,10 @@ class BlogPage(models.Model): comments = self.comment_set.all() parent_comments = comments.filter(parent_comment=None) + def get_category_tree(self): + return [] +''' + class Category(models.Model): """文章分类""" diff --git a/blog/urls.py b/blog/urls.py index 145a5b3..c3b4035 100644 --- a/blog/urls.py +++ b/blog/urls.py @@ -22,10 +22,10 @@ urlpatterns = [ url(r'^$', views.IndexView.as_view(), name='index'), # url(r'^article/(?P\d+)$', views.ArticleDetailView.as_view(), name='detail'), url(r'^page/(?P\d+)$', views.IndexView.as_view(), name='index_page'), - url(r'(?P\d+)/(?P\d+)/(?P\d+)/(?P\d+)-(?P\S+).html$', + url(r'^article/(?P\d+)/(?P\d+)/(?P\d+)/(?P\d+)-(?P\S+).html$', views.ArticleDetailView.as_view(), name='detail'), - url(r'(?P\d+)/(?P\d+)/(?P\d+)/(?P\d+)-(?P\S+).html$', + url(r'^blogpage/(?P\d+)/(?P\d+)/(?P\d+)/(?P\d+)-(?P\S+).html$', views.ArticleDetailView.as_view(), name='pagedetail'), url(r'^category/(?P\S+).html$', views.CategoryDetailView.as_view(), name='category_detail'), diff --git a/blog/views.py b/blog/views.py index 73b121a..192025a 100644 --- a/blog/views.py +++ b/blog/views.py @@ -15,6 +15,23 @@ from django import forms from blog.wordpress_helper import wordpress_helper from django import http from django.http import HttpResponse +from abc import ABCMeta, abstractmethod + + +class SeoProcessor(): + __metaclass__ = ABCMeta + + @abstractmethod + def get_title(self): + pass + + @abstractmethod + def get_keywords(self): + pass + + @abstractmethod + def get_description(self): + pass class ArticleListView(ListView): @@ -30,7 +47,11 @@ class ArticleListView(ListView): page_kwarg = 'page' -class IndexView(ArticleListView): +class IndexView(ArticleListView, SeoProcessor): + def get_title(self): + return '逝去日子的博客' + def get_keywords(self): + pass def get_queryset(self): article_list = Article.objects.filter(status='p') @@ -54,7 +75,7 @@ class ArticleDetailView(DetailView): return obj def get_context_data(self, **kwargs): - articleid = int(self.kwargs['article_id']) + articleid = int(self.kwargs[self.pk_url_kwarg]) def get_article(id): try: @@ -96,6 +117,20 @@ class ArticleDetailView(DetailView): """ +''' +class PageDetailView(ArticleDetailView): + model = BlogPage + pk_url_kwarg = 'page_id' + + def get_object(self): + obj = super(PageDetailView, self).get_object() + print(obj.title) + obj.viewed() + # obj.body = markdown2.markdown(obj.body) + return obj +''' + + class CategoryDetailView(ArticleListView): # template_name = 'index.html' # context_object_name = 'article_list' diff --git a/templates/base.html b/templates/base.html index 26c5a1b..0228cda 100644 --- a/templates/base.html +++ b/templates/base.html @@ -12,18 +12,19 @@ - 逝去日子的博客 | 大巧无工,重剑无锋 + {% block header %} + {% endblock %} - + + - - + diff --git a/templates/blog/articledetail.html b/templates/blog/articledetail.html index d1fb276..9f5af18 100755 --- a/templates/blog/articledetail.html +++ b/templates/blog/articledetail.html @@ -1,6 +1,20 @@ {% extends 'base.html' %} {% load blog_tags %} - +{% block header %} + {{ article.title }} | {{ SITE_DESCRIPTION }} + + + + + + + + {% for t in article.tags.all %} + + {% endfor %} + +{% endblock %} {% block content %}
diff --git a/templates/blog/index.html b/templates/blog/index.html index 0355216..e2bfd45 100644 --- a/templates/blog/index.html +++ b/templates/blog/index.html @@ -1,6 +1,15 @@ {% extends 'base.html' %} {% load blog_tags %} - +{% block header %} + {{ SITE_NAME }} | {{ SITE_DESCRIPTION }} + + + + + + + +{% endblock %} {% block content %}
diff --git a/templates/blog/tags/article_meta_info.html b/templates/blog/tags/article_meta_info.html index 1367bde..8fa92f2 100644 --- a/templates/blog/tags/article_meta_info.html +++ b/templates/blog/tags/article_meta_info.html @@ -1,6 +1,6 @@ {% load blog_tags %}
\ No newline at end of file