完善seo功能,完善feed功能

车亮亮 9 years ago
parent 65093cf278
commit 4aa905283e

@ -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()

@ -143,6 +143,8 @@ DATE_TIME_FORMAT = '%Y-%m-%d'
SITE_NAME = 'Django Blog'
SITE_DESCRIPTION = '大巧无工,重剑无锋.'
SITE_SEO_DESCRIPTION = '小站主要用来分享和记录学习经验,教程,记录个人生活的点滴以及一些随笔.欢迎大家访问小站'
ARTICLE_SUB_LENGTH = 300
# bootstrap颜色样式

@ -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())
]

@ -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)

@ -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')
}

@ -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):
"""文章分类"""

@ -22,10 +22,10 @@ urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
# url(r'^article/(?P<article_id>\d+)$', views.ArticleDetailView.as_view(), name='detail'),
url(r'^page/(?P<page>\d+)$', views.IndexView.as_view(), name='index_page'),
url(r'(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/(?P<article_id>\d+)-(?P<slug>\S+).html$',
url(r'^article/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/(?P<article_id>\d+)-(?P<slug>\S+).html$',
views.ArticleDetailView.as_view(),
name='detail'),
url(r'(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/(?P<page_id>\d+)-(?P<slug>\S+).html$',
url(r'^blogpage/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/(?P<page_id>\d+)-(?P<slug>\S+).html$',
views.ArticleDetailView.as_view(),
name='pagedetail'),
url(r'^category/(?P<category_name>\S+).html$', views.CategoryDetailView.as_view(), name='category_detail'),

@ -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'

@ -12,18 +12,19 @@
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width"/>
<title>逝去日子的博客 | 大巧无工,重剑无锋</title>
{% block header %}
{% endblock %}
<link rel="profile" href="http://gmpg.org/xfn/11"/>
<link rel="pingback" href="https://www.lylinux.org/xmlrpc.php"/>
<!--[if lt IE 9]>
<script src="{% static 'blog/js/html5.js' %}" type="text/javascript"></script>
<![endif]-->
<meta property="wb:webmaster" content="fdb053e76bf865f3"/>
<script src="{% static 'blog/js/html5.js' %}" type="text/javascript"></script>
<![endif]-->
<link rel='dns-prefetch' href='//fonts.googleapis.com'/>
<link rel='dns-prefetch' href='//s.w.org'/>
<link rel="alternate" type="application/rss+xml" title="逝去日子的博客 &raquo; Feed" href="https://www.lylinux.org/feed"/>
<link rel="alternate" type="application/rss+xml" title="逝去日子的博客 &raquo; 评论Feed"
<link rel="alternate" type="application/rss+xml" title="{{ SITE_NAME }} &raquo; Feed"
href="{{ SITE_BASE_URL }}feed"/>
<link rel="alternate" type="application/rss+xml" title="{{ SITE_NAME }} &raquo; 评论Feed"
href="https://www.lylinux.org/comments/feed"/>

@ -1,6 +1,20 @@
{% extends 'base.html' %}
{% load blog_tags %}
{% block header %}
<title>{{ article.title }} | {{ SITE_DESCRIPTION }}</title>
<meta property="og:type" content="article"/>
<meta property="og:title" content="{{ article.title }}"/>
<meta property="og:url"
content="{{ article.get_absolute_url }}"/>
<meta property="article:published_time" content="{% datetimeformat article.pub_time %}"/>
<meta property="article:modified_time" content="{% datetimeformat article.pub_time %}"/>
<meta property="article:author" content="{{ article.author.get_absolute_url }}"/>
<meta property="article:section" content="{{ article.category.name }}"/>
{% for t in article.tags.all %}
<meta property="article:tag" content="{{ t.name }}"/>
{% endfor %}
<meta property="og:site_name" content="{{ SITE_NAME }}"/>
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">

@ -1,6 +1,15 @@
{% extends 'base.html' %}
{% load blog_tags %}
{% block header %}
<title>{{ SITE_NAME }} | {{ SITE_DESCRIPTION }}</title>
<meta name="description" content="{{ SITE_SEO_DESCRIPTION }}"/>
<meta name="keywords" content="linux,apache,mysql,服务器,ubuntu,shell,java,web,javaweb,wordpress,csharp,.net,asp"/>
<meta property="og:type" content="blog"/>
<meta property="og:title" content="{{ SITE_NAME }}"/>
<meta property="og:description" content="{{ SITE_DESCRIPTION }}"/>
<meta property="og:url" content="{{ SITE_BASE_URL }}"/>
<meta property="og:site_name" content="{{ SITE_NAME }}"/>
{% endblock %}
{% block content %}
<div id="primary" class="site-content">
<div id="content" role="main">

@ -1,6 +1,6 @@
{% load blog_tags %}
<footer class="entry-meta">
本条目发布于<a href="{{ article.get_absolute_url }}" title="下午10:54" rel="bookmark">
本条目发布于<a href="{{ article.get_absolute_url }}" title="{% datetimeformat article.created_time %}" rel="bookmark">
<time class="entry-date"
datetime="{{ article.created_time }}">

@ -1,5 +1,3 @@
<nav id="site-navigation" class="main-navigation" role="navigation">
<button class="menu-toggle">菜单</button>
<a class="assistive-text" href="#content" title="跳至正文">跳至正文</a>
@ -14,7 +12,15 @@
{% for node in root_categorys %}
{% include 'nav_node.html' %}
{% endfor %}
{% if nav_pages %}
{% for node in nav_pages %}
<li id="menu-item-{{ node.pk }}"
class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-{{ node.pk }}">
<a href="{{ node.get_absolute_url }}">{{ node.title }}</a>
</li>
{% endfor %}
{% endif %}
</ul>
</div>
</nav><!-- #site-navigation -->
Loading…
Cancel
Save