sitemap
是 Google 最先引入的网站地图协议,采用 XML 格式,它的作用简而言之就是优化搜索引擎的索引效率,详细的解释可以参考 维基百科。
下面介绍下如何为Django
站点添加sitemap
功能。
启用sitemap
在django
的settings.py
的INSTALLED_APPS
中添加
'django.contrib.sites',
'django.contrib.sitemaps',
然后migrate
数据库:
./manage.py makemigrations
./manage.py migrate
登陆Django
后台,修改SITE为你Django
网站的域名和名称,然后在settings.py
中加入SITE_ID = 1
来制定当前的站点。
添加sitemap功能
创建sitemap
创建sitemap.py
.内容类似下面的代码:
from django.contrib.sitemaps import Sitemap
from blog.models import Article, Category, Tag
from accounts.models import BlogUser
from django.contrib.sitemaps import GenericSitemap
from django.core.urlresolvers import reverse
class StaticViewSitemap(Sitemap):
priority = 0.5
changefreq = 'daily'
def items(self):
return ['blog:index', ]
def location(self, item):
return reverse(item)
class ArticleSiteMap(Sitemap):
changefreq = "monthly"
priority = "0.6"
def items(self):
return Article.objects.filter(status='p')
def lastmod(self, obj):
return obj.last_mod_time
class CategorySiteMap(Sitemap):
changefreq = "Weekly"
priority = "0.6"
def items(self):
return Category.objects.all()
def lastmod(self, obj):
return obj.last_mod_time
class TagSiteMap(Sitemap):
changefreq = "Weekly"
priority = "0.3"
def items(self):
return Tag.objects.all()
def lastmod(self, obj):
return obj.last_mod_time
class UserSiteMap(Sitemap):
changefreq = "Weekly"
priority = "0.3"
def items(self):
return BlogUser.objects.all()
def lastmod(self, obj):
return obj.date_joined
url配置
url.py中加入:
from DjangoBlog.sitemap import StaticViewSitemap, ArticleSiteMap, CategorySiteMap, TagSiteMap, UserSiteMap
sitemaps = {
'blog': ArticleSiteMap,
'Category': CategorySiteMap,
'Tag': TagSiteMap,
'User': UserSiteMap,
'static': StaticViewSitemap
}
url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
至此,全部完成,运行你的django
程序,浏览器输入:
就可以看见已经成功生成了,然后就可以提交这个地址给搜索引擎。 我的网站的sitemap的地址是:
我的sitemap.xml生成了,但我的favicon.ico图片在域名/sitemap.xml中不显示
sitemap的域名都是example.com,这个要怎么解决呢。
需要在
django_site
表中将domain
和name
修改为你自己的。或者这么问 一个project 多个site_id 怎么设置?不会都写在 setting文件里吧?
如果多个site的话,就需要从request中获取domain了,比如:
<div class="codehilite"> </div>参考: 官方文档
大佬 你的 输入框 支持 mrakdown 但是 有字数限制 不能贴代码
用的是 sitemap 通用类 部署到 线上 域名显示的是 localhost 怎么解决 jingwangnet.com/sitemap.xml https://github.com/jingwangnet/jingwang-data-django/blob/master/data/views.py
没看到localhost呀
<loc>http://jingwangnet.com/detail/company/1/</loc><lastmod>2018-04-08</lastmod><priority>0.6</priority></url>
老哥 后来我花了一早上 发现 我没有设定 site id 。。。。 也没有启用 site 框架 看了好几遍你的帖子 解决了 但是 现在还是有个疑问。通过官方文档 了解到 site 框架 是用于一个项目多个网站的 框架。但是不知道 怎么实现 。请问下 老哥 有没有这方面的实际代码或者资料