今天發(fā)現(xiàn)百度站長平臺提交需要一個站點地圖,百度了一堆都過期的,現(xiàn)在記錄下詳細過程。
1兰珍、在setting.py的INSTALL中加入Django自帶的站點地圖包模塊
2、在setting.py的TEMPLATES中加入APP_DIRS:True
3询吴、在項目里新建一個文件夾加入__init__.py 設(shè)置為包,然后新建個模塊亮元,名字隨意我的是BlogSitemap.py
4猛计、在BlogSitemap.py模塊中加入生成站點地圖的代碼 如下:
from thrones.apps.blog.models import Article
from django.contrib.sitemaps import Sitemap
from django.db.models import Sum
class BlogSitemap(Sitemap):
changefreq = "daily"
#priority = 0.5
def items(self):
return Article.objects.filter(status="published")
def lastmod(self, obj):
if obj.updated:
return obj.updated
return obj.date_publish
def priority(self, obj):
if obj.views:
allReadCount = Article.objects.all().aggregate(Sum('views'))['views__sum']
curPriority = obj.views / float(allReadCount)
return '%.2f' % (curPriority / 2.0 + 0.5)
return 0.50
解釋一下 changefreq更新頻率。def item 這個函數(shù)必須有爆捞,是站點地圖生成的數(shù)據(jù)來源奉瘤,def lastmod 是排序,返回類型必須是datatime煮甥、def priority 是權(quán)重盗温,這里用了個不想多說的算法,嘿嘿
當然還有def location的方法我沒有覆蓋成肘,這里是獲取xml文章的地址卖局,沒有覆蓋 會默認調(diào)用get_absolute_url,如果 你的model中沒有,要自己寫返回文章的url
5双霍、打開urls.py 路由配置文件砚偶。加入如下字典:
7、在urls.py文件加入路由轉(zhuǎn)發(fā)
url(r'^blog_sitemap\.xml$', sitemap, {'sitemaps': blog_sitemap},
name='django.contrib.sitemaps.views.sitemap'),
8洒闸、然后就可以訪問http://127.0.0.1:8000/blog_sitemap.xml 獲取到站點地圖的xml了
如下: